php+redis緩存類

b5cw 9年前發布 | 7K 次閱讀 PHP Redis

php+redis緩存類

    <?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(); //首次運行或緩存過期,生成緩存  



?>  </pre> 


 本文由用戶 b5cw 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!