Zend_Cache有兩部分組成:前端和後端,前端用於操作緩存,後端提供緩存的存儲方式。
Zend_Cache的基本使用方式
一般使用工廠方式:Zend_Cache::factory()的創建緩存對象。
Zend_Cache::factory方法有四個參數: 前端類型,後端類型,前端參數,後端參數。
前端類型有:
1.Core 這是前端的核心緩存,前端的其他類型緩存都繼承自Core,緩存變量或數組就用到這個了。
2.File 緩存文件,沒有研究具體用途
3.Output 捕獲並緩存輸出,這個做頁面局部緩存很有用,個人認為缺點是需要在視圖中寫入相應的代碼。
4.Page 緩存頁面,對提高效率幫助很大,因為一但命中緩存,就直接讀取緩存並輸出,不再執行後面的代碼。可以設定session,cookie,get,post 作為產生cache_id的干擾碼。比如不同的cookie產生不同的緩存頁面。缺點是只能整個頁面緩存,不能像smarty那樣實現整頁緩存,但是可以控制局部不緩存。
5.Class 緩存靜態類和對象。
6.Function 緩存函數。
後端類型有:
1.APC
2.File
3.Memcached
4.Sqlite
5.Xcache
6.ZendPlatform
一目了然了,大部分人經常會用到的是File和Memcached吧。
前端參數和後端參數,不同前後端類型有不同的參數,具體請查看官方手冊 http://framework.zend.com/manual/en/zend.cache.frontends.html。
具體實例(數組緩存和頁面緩存)
一.前端類型為Core, 後端類型File的緩存對象的創建及使用
<?php
$frontend = 'Core';
$frontendOptions = array(
'caching' => true, //開啟緩存,調試程序的時候可以設為false
'lifetime' => 3600, //緩存生命期
'automatic_serialization' => true //自動序列化,存儲數組或者對象數據時一定要打開
);
$backend = 'File';
$backendOptions => array(
'cache_dir' => '/tmp', //存放路徑
'file_name_prefix' => 'page_cache' //緩存文件前綴,默認為zend_cache
)
//實例化緩存對象
$coreCache = Zend_Cache::factroy($frontend, $backend, $frontendOptions, $backednOptions);
//如果命中id為news_list的緩存直接得到$newsList,未命中執行大括號內的代碼
if (!$newsList = $coreCache->load('news_list')) {
//查詢數據庫,得到$newsList
//....省略
//緩存$newslist至緩存,id為news_list
$coreCache->save($newsList, 'news_list');
}
?>
二、前端類型為Page,後端依然為File的實例
<?php
$frontend = 'Page';
$frontendOptions = array(
'caching' => true, //開啟緩存,調試程序的時候可以設為false
'lifetime' => 3600, //緩存生命期
//需要使用頁面緩存的url匹配規則
'regexps' => array(
//首頁的url匹配
'^/(index|index/)?$' =>array(
'cache' => true,
'cache_with_session_variables' => false, //如果存在session變量不緩存
'cache_with_cookie_variables' => true, //如果存在cookie變量緩存
'make_id_with_cookie_variables' => false //不使用cookie變量作為id的干擾碼
)
)
);
$backend = 'File';
$backendOptions => array(
'cache_dir' => '/tmp', //存放路徑
'file_name_prefix' => 'page_cache' //緩存文件前綴,默認為zend_cache
)
//實例化頁面緩存對象
$pageCache = Zend_Cache::factroy($frontend, $backend, $frontendOptions, $backednOptions);
//如果命中緩存,直接輸出緩存內容,並終止程序,後面的代碼將不被執行,如果未命中,捕獲輸出並寫入緩存。
$pageCache->start();
?>
需要注意的是,如果用到頁面緩存,為了最大程度提高執行效率,應將代碼放到程序的最前面。減少不必要的文件包含及操作。
順便提一句,Zend_Cache沒有跟ZF其他組件耦合,所以也可以單獨提取出來用於非ZF框架的程序。