程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php文件緩存數據

php文件緩存數據

編輯:關於PHP編程

 

在做網吧看看的時候,由於頁面中存在電影的搜索功能(用戶輸入)

這個功能由於不能夠做成靜態化,那麼就只能夠動態,用動態的時候會對數據庫,服務器壓力帶來很大的考驗

所以就只能用到緩存數據的方式了

數據緩存的形式包括:

1、將數據緩存到內存,相信大家這個就會想到了Memcached.memcached是高性能的分布式內存緩存服務器。 一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、 提高可擴展性。

2、用文件來緩存數據.將數據保存到文件中,用key=>value的形式來保存,key指文件名.這個地方必須要保證key的唯一性

設置文件的緩存時間,如果過時了就從數據庫中得到數據並保存到文件中,

下面是一個文件緩存類:

1、緩存數據

2、得到數據

3、判斷緩存數據是否存在

4、刪除某個緩存數據

5、清除過時的緩存數據

6、清除所以的緩存數據

 

class Inc_FileCache{ 

     

    private $cacheTime = 3600;        //默認緩存時間 

    private $cacheDir = CACHE_DIR;    //緩存絕對路徑 

    private $md5 = true;              //是否對鍵進行加密 

    private $suffix = ".php";         //設置文件後綴 

     

    public function __construct($config){ 

        if( is_array( $config ) ){ 

            foreach( $config as $key=>$val ){ 

                $this->$key = $val; 

            } 

        } 

    } 

     

    //設置緩存 

    public function set($key,$val,$leftTime=null){ 

        $key = $this->md5 ? md5($key) : $key; 

        $leftTime = $leftTime ? $leftTime : $this->cacheTime; 

        !file_exists($this->cacheDir) && mkdir($this->cacheDir,0777); 

        $file = $this->cacheDir.'/'.$key.$this->suffix; 

        $val = serialize($val); 

        @file_put_contents($file,$val) or $this->error(__line__,"文件寫入失敗"); 

        @chmod($file,0777)  or $this->error(__line__,"設定文件權限失敗"); 

        @touch($file,time()+$leftTime) or $this->error(__line__,"更改文件時間失敗"); 

    } 

     

    //得到緩存 

    public function get($key){ 

        $this->clear(); 

        if( $this->_isset($key) ){ 

            $key_md5 = $this->md5 ? md5($key) : $key; 

            $file = $this->cacheDir.'/'.$key_md5.$this->suffix; 

            $val = file_get_contents($file); 

            return unserialize($val); 

        } 

        return null; 

    } 

     

    //判斷問件是否有效 

    public function _isset($key){ 

        $key = $this->md5 ? md5($key) : $key; 

        $file = $this->cacheDir.'/'.$key.$this->suffix; 

        if( file_exists($file) ){ 

            if( @filemtime($file) >= time() ){ 

                return true; 

            }else{ 

                @unlink($file); 

                return false; 

            } 

        } 

        return false; 

    } 

     

    //刪除文件 

    public function _unset($key){ 

        if( $this->_isset($key) ){ 

            $key_md5 = $this->md5 ? md5($key) : $key; 

            $file = $this->cacheDir.'/'.$key_md5.$this->suffix; 

            return @unlink($file); 

        } 

        return false; 

    } 

     

    //清除過期緩存文件 

    public function clear(){ 

        $files = scandir($this->cacheDir); 

        foreach ($files as $val){ 

            if (@filemtime($this->cacheDir."/".$val) < time()){ 

                @unlink($this->cacheDir."/".$val); 

            } 

        } 

    } 

     

    //清除所有緩存文件 

    public function clear_all(){ 

        $files = scandir($this->cacheDir); 

        foreach ($files as $val){ 

            @unlink($this->cacheDir."/".$val); 

        } 

    } 

     

    private function error($line,$msg){ 

        die("出錯文件:".__file__."/n出錯行:$line/n錯誤信息:$msg"); 

    } 

 

在頁面中的調用方法如下:

 

$cacheFile = new Inc_FileCache(array('cacheTime'=>60,'suffix'=>'.php')); 

         

//得到電影熱播榜 

$where = " where pid=75"; 

$moviehotModel = $this->getM('moviehot'); 

$moviehotCount = $moviehotModel->getCount($where); 

if( !$cacheFile->_isset($where.$moviehotCount.'moviehot') ){ 

    $moviehotResult = $moviehotModel->getList(" WHERE pid=75 ",'0,10',"orderby desc"); 

    if(count($moviehotResult) > 0) { 

        $cacheFile->set($where.$moviehotCount.'moviehot',$moviehotResult); 

    } 

}else{ 

    $moviehotResult = $cacheFile->get($where.$moviehotCount.'moviehot'); 

$this->tpl['moviehotResult'] = $moviehotResult; 

 

大家如果還有什麼好的文件緩存的代碼可以拿來共享一下

 

摘自 ms_X0828的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved