龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php+redis缓存类

时间:2017-10-24 03:04来源:网络整理 作者:网络 点击:
分享到:
php+redis缓存类 php+redis缓存类[代码片段(130行)]

php+redis缓存类```csharp <?php

class redisCache {  
   /** 
    * $host : redis服务器ip 
    * $port : redis服务器端口 
    * $lifetime : 缓存文件有效期,单位为秒 
    * $cacheid : 缓存文件路径,包含文件名 
   */  
   private $host;  
   private $port;  
   private $lifetime;  
   private $cacheid;  
   private $data;  
   public $redis;  
   /** 
    * 析构函数,检查缓存目录是否有效,默认赋值 
   */  
   function __construct($lifetime=1800) {  
        //配置  
        $this->host = "127.0.0.1";  
        $this->port = "6379";  
        $redis = new Redis();   
        $redis->pconnect($this->host,$this->port);   
        $this->redis=$redis;  
        $this->cacheid = $this->getcacheid();  
        $this->lifetime = $lifetime;  
        $this->data=$redis->hMGet($this->cacheid, array('content','creattime'));  
        //print_r($this->redis);  
        //print_r($this->data);  
   }

   /** 
    * 检查缓存是否有效 
   */  
   private function isvalid(){  
       $data=$this->data;  
       if (!$data['content']) return false;  
       if (time() - $data['creattime'] > $this->lifetime) return false;  
       return true;  
   }  
   /** 
    * 写入缓存 
    * $mode == 0 , 以浏览器缓存的方式取得页面内容 
   */  
   public function write($mode=0,$content='') {  
       switch ($mode) {  
           case 0:  
               $content = ob_get_contents();  
               break;  
           default:  
               break;  
       }  
       ob_end_flush();  
       try {  
            $this->redis->hMset($this->cacheid, array('content'=>$content,'creattime'=>time()));  
            $this->redis->expireAt($this->cacheid, time() + $this->lifetime);  
       }  
       catch (Exception $e) {  
           $this->error('写入缓存失败!');  
       }  
   }  
   /** 
    * 加载缓存 
    * exit() 载入缓存后终止原页面程序的执行,缓存无效则运行原页面程序生成缓存 
    * ob_start() 开启浏览器缓存用于在页面结尾处取得页面内容 
   */  
   public function load() {  
       if ($this->isvalid()) {  
           echo $this->data['content'];  
           exit();  
       }  
       else {  
           ob_start();  
       }  
   }  
   /** 
    * 清除缓存 
   */  
   public function clean() {  
       try {  
           $this->redis->hDel($this->cacheid, array('content','creattime'));  
       }  
       catch (Exception $e) {  
           $this->error('清除缓存失败!');  
       }  
   }  
   /** 
    * 取得缓存文件路径 
   */  
   private function getcacheid() {  
       return $this->dir.md5($this->geturl()).$this->ext;  
   }  
   /** 
    * 取得当前页面完整url 
   */  
   private function geturl() {  
       $url = '';  
       if (isset($_SERVER['REQUEST_URI'])) {  
           $url = $_SERVER['REQUEST_URI'];  
       }  
       else {  
           $url = $_SERVER['Php_SELF'];  
           $url .= empty($_SERVER['QUERY_STRING'])?'':'?'.$_SERVER['QUERY_STRING'];  
       }  
       return $url;  
   }  
   /** 
    * 输出错误信息 
   */  
   private function error($str) {  
       echo '<div style="color:red;">'.$str.'</div>';  
   }  
}

//用法:  
// require_once('redisCache.php');  
// $cache = new redisCache(10); //设置缓存生存期  
// if ($_GET['clearCache']) $cache->clean();  
// else  $cache->load(); //装载缓存,缓存有效则不执行以下页面代码  
// //页面代码开始

// //页面代码结束  
// $cache->write(); //首次运行或缓存过期,生成缓存

?>

```

精彩图集

赞助商链接