php靜態檔案快取

來源:互聯網
上載者:User
PHP檔案快取主要用來減輕資料庫伺服器的壓力,這裡所說的PHP檔案靜態緩衝是指靜態化,直接產生HTML或XML等文字檔,有更新的時候重產生一次,適合於不太變化的頁面。

1.靜態檔案快取
2.Memcache、redis緩衝
靜態緩衝:用php把資料群組裝好,然後把資料寫入檔案裡。
staticcache.php

<?phpclass File{    private $_dir;//定義一個預設的路徑    const EXT = '.txt';//定義一個檔案名稱尾碼的常量    public function __construct(){        $this->_dir = dirname(__FILE__).'/files/';//擷取檔案的目前的目錄,再放到該目錄下的files檔案夾中,然後賦給$_dir    }    //把產生/擷取/刪除緩衝這三個操作封裝在cacheData方法中    public function cacheData($key,$value = '',$path = ''){        $filename = $this->_dir.$path.$key.self::EXT;//拼裝成一個檔案:預設目錄、路徑、檔案名稱、檔案名稱尾碼        //將value值寫入緩衝        if($value !== ''){        //刪除緩衝            if (is_null($value)){                return @unlink($filename);//unlink刪除檔案,@忽略警告            }            $dir = dirname($filename);            if(!is_dir($dir)){//如果目錄不存在就建立目錄,首先要擷取這個目錄            mkdir($dir,0777);        }        return file_put_contents($filename, json_encode($value));}        //擷取緩衝        if(!is_file($filename)){        return FALSE;        }else{            return json_decode(file_get_contents($filename),true);        }    }}

test.php

<?phprequire_once('./staticcache.php');$data = array('id' => 1,'name' => 'panda','number' => array(1,7,8));$file = new File();//擷取緩衝if($file->cacheData('index_cache')){    var_dump($file->cacheData('index_cache'));exit;    echo "success";}else{    echo "error";}

設定靜態緩衝時間最佳化後:
cachetime.php

<?phpclass File{    private $_dir;//定義一個預設的路徑    const EXT = '.txt';//定義一個檔案名稱尾碼的常量    public function __construct(){        $this->_dir = dirname(__FILE__).'/files/';//擷取檔案的目前的目錄,再放到該目錄下的files檔案夾中,然後賦給$_dir    }    //把產生/擷取/刪除緩衝這三個操作封裝在cacheData方法中    public function cacheData($key,$value = '',$cacheTime = 0){//不傳cacheTime永久有效        $filename = $this->_dir.$key.self::EXT;//拼裝成一個檔案:預設目錄、路徑、檔案名稱、檔案名稱尾碼        //將value值寫入緩衝        if($value !== ''){//刪除緩衝if (is_null($value)){return @unlink($filename);//unlink刪除檔案,@忽略警告}$dir = dirname($filename);if(!is_dir($dir)){//如果目錄不存在就建立目錄,首先要擷取這個目錄mkdir($dir,0777);}$cacheTime = sprintf('%011d',$cacheTime)//規定緩衝時間格式,不足11位,則前面補0,方便擷取時截取return file_put_contents($filename, $cacheTime.json_encode($value));//緩衝時間與資料拼接}        //擷取緩衝if(!is_file($filename)){return FALSE;}$contents = file_get_contents($filename);$cacheTime = (int)substr($contents,0,11);$value = substr($contents,11);if($cacheTime !=0 && ($cacheTime + fileatime($filename)<time())){//判斷是否到期unlink($filename);//緩衝失效刪除檔案return FALSE;}return json_decode($value,true);//如果沒到期,輸出緩衝內容}}

緩衝方式開發首頁介面

<?phprequire_once('./jsonxml.php');require_once('./db.php');require_once('./cachetime.php');$page = isset($_GET['page']) ? $_GET['page'] : 1;$pageSize = isset($_GET['pagesize']) ? $_GET['pagesize'] : 6;if(!is_numeric($page)||!is_numeric($pageSize)){return Response::show(401,'資料不合法');}$offset = ($page - 1) * $pageSize;$sql = "select * from video where status = 1 order by orderby desc limit ".$offset.",".$pageSize;//4-4 讀取緩衝方式開發首頁介面$cache = new File();$videos = array();if(!$videos = $cache->cacheData('index_yjp_cache'.$page.'-'.$pageSize)){echo 1;exit;//如果緩衝失效輸出1try{$connect = Db::getInstance()->connect();}catch(Exception $e){return Response::show(403,'資料庫連結失敗');}$result = mysql_query($sql,$connect);$videos = array();while ($video = mysql_fetch_assoc($result)){$videos[] = $video;}if($videos){$cache->cacheData('index_yjp_cache'.$page.'-'.$pageSize,$videos,1200);}}if($videos){return Response::show(200,'首頁資料擷取成功',$videos);}else{return Response::show(400,'失敗',$videos);}

註:檔案快取注意檔案的到期時間
1.擷取檔案建立時間樣本:

$ctime=filectime("chinawinxp.txt");echo "建立時間:".date("Y-m-d H:i:s",$ctime);

2.擷取檔案修改時間樣本:

$mtime=filemtime("chinawinxp.txt");echo "修改時間:".date("Y-m-d H:i:s",$mtime);

fileatime() 函數返回指定檔案的上次訪問時間

2.memcache和redis緩衝
開啟服務;串連連接埠,快取服務器;php操作php操作redis、mencache條件:
1) 安裝phpredis擴充/mencache擴充
2) php串連redis服務 connet(127.0.0.1,6379);
串連mencache服務 connet('memcache_host',11211);
3) set 設定緩衝
4) get 擷取緩衝
設定緩衝時間:set key time(時間) value

PHP緩衝包括PHP編譯緩衝和PHP資料緩衝兩種。PHP是一種解釋型語言,屬於邊編譯邊啟動並執行那種。這種運行模式的優點是程式修改很方便,但是運行效率卻很低下。PHP編譯緩衝針對這種情況做改進處理,使得PHP語言只要運行一次,就可以把程式的編譯結果緩衝起來。這樣,接下來的每次運行都不需要再次編譯了,這大大提高PHP運行速度。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.