ThinkPHP實(shí)現(xiàn)靜態(tài)緩存和動(dòng)態(tài)緩存示例代碼
靜態(tài)緩存
要使用靜態(tài)緩存功能,需要開啟HTML_CACHE_ON參數(shù),并且使用HTML_CACHE_RULES配置參數(shù)設(shè)置靜態(tài)緩存規(guī)則文件。
定義靜態(tài)規(guī)則
'HTML_CACHE_ON' => true, // 開啟靜態(tài)緩存 'HTML_CACHE_TIME' => 60, // 全局靜態(tài)緩存有效期(秒) 'HTML_FILE_SUFFIX' => '.shtml', // 設(shè)置靜態(tài)緩存文件后綴 'HTML_CACHE_RULES' => array( // 定義靜態(tài)緩存規(guī)則 // 定義格式1 數(shù)組方式 '靜態(tài)地址' => array('靜態(tài)規(guī)則', '有效期', '附加規(guī)則'), // 定義格式2 字符串方式 '靜態(tài)地址' => '靜態(tài)規(guī)則', )
靜態(tài)緩存文件的根目錄在HTML_PATH定義的路徑下面,并且只有定義了靜態(tài)規(guī)則的操作才會(huì)進(jìn)行靜態(tài)緩存。 并且靜態(tài)緩存支持不同的存儲(chǔ)類型。 靜態(tài)緩存僅在GET請(qǐng)求下面有效。
靜態(tài)地址
全局的操作靜態(tài)規(guī)則
'read'=>array('{id}',60)//定義所有的read操作的靜態(tài)規(guī)則
定義全局的控制器靜態(tài)規(guī)則
'user:'=>array('User/{:action}_{id}','600')//定義所有的User控制器的靜態(tài)規(guī)則
定義某個(gè)控制器的操作的靜態(tài)規(guī)則//定義Blog控制器的read操作進(jìn)行靜態(tài)緩存
'blog:read'=>array('{id}',0)//參數(shù)為0表示永久緩存
定義全局的靜態(tài)緩存規(guī)則
'*'=>array('{$_SERVER.REQUEST_URI|md5}')//這個(gè)屬于特殊情況下的使用,任何模塊的操作都適用
靜態(tài)規(guī)則
靜態(tài)規(guī)則是用于定義要生成的靜態(tài)文件的名稱,靜態(tài)規(guī)則的定義要確保不會(huì)沖突。
使用系統(tǒng)變量
{$_×××|function}//_GET、_REQUEST、_SERVER、_SESSION、_COOKIE {$_GET.name} {$_SERVER.REQUEST_URI|md5}
使用框架自定義的變量
{:module}/{:controller}_{:action}//{:module} 、{:controller} 和{:action}分別表示當(dāng)前模塊名、控制器名和操作名。
使用_GET變量
{var|function}//{id}其實(shí)等效于 {$_GET.id}
直接使用函數(shù)
{|function}//{|time},time函數(shù)獲取時(shí)間后作為文件名稱
混合定義
'{id},{name|md5}' //在{}之外的字符作為字符串對(duì)待,如果包含有"/",會(huì)自動(dòng)創(chuàng)建目錄。 {:module}/{:action}_{id}//會(huì)在靜態(tài)目錄下面創(chuàng)建模塊名稱的子目錄,然后寫入操作名_id.shtml 文件。
動(dòng)態(tài)緩存
[S方法數(shù)據(jù)緩存]
緩存初始化
S(array('type'=>'xcache','expire'=>60));
系統(tǒng)目前已經(jīng)支持的緩存類型包括:Apachenote、Apc、Db、Eaccelerator、File、Memcache、Redis、Shmop、Sqlite、Wincache和Xcache。如果S方法不傳入type參數(shù)初始化的話,則讀取配置文件中設(shè)置的DATA_CACHE_TYPE參數(shù)值作為默認(rèn)類型。同樣的道理,prefix參數(shù)如果沒有傳入會(huì)讀取配置文件的DATA_CACHE_PREFIX參數(shù)值,expire參數(shù)沒有傳入則讀取DATA_CACHE_TIME配置值作為默認(rèn)。
對(duì)于全局的緩存方式,一般我們建議添加prefix(緩存前綴)參數(shù)用以區(qū)分不同的應(yīng)用,以免混淆。
設(shè)置緩存
數(shù)據(jù)緩存可以支持緩存隊(duì)列,簡(jiǎn)單的說就是可以限制緩存的數(shù)量,只需要在初始化的時(shí)候指定length參數(shù)。
S('name',$value); S('name',$value,300);//緩存數(shù)據(jù)300秒 S('name',$value,array('type'=>'file','expire'=>300));//改變之前的緩存方式或者更多的參數(shù) S(array('type'=>'xcache','length'=>100,'expire'=>60));//系統(tǒng)只會(huì)緩存最近的100條緩存數(shù)據(jù)。
讀取緩存
$value = S('name');//如果緩存標(biāo)識(shí)不存在或者已經(jīng)過期,則返回false,否則返回緩存值。
刪除緩存
S('name',null);
注意:使用每種緩存時(shí),需要ThinkPHP加載對(duì)應(yīng)的驅(qū)動(dòng)文件,并設(shè)置好對(duì)應(yīng)的配置。
使用實(shí)例
$user = M('User'); $value = S('list'); if (empty($value)) { $list = $user->select(); S('list', $list, 3600); echo '這個(gè)是直接從數(shù)據(jù)庫(kù)中讀取的文件'; dump($list); } else { echo '這個(gè)是緩存文件'; dump($value); }
[快速緩存]
系統(tǒng)還提供了一個(gè)快速緩存方法F可以用來更快的操作,但是,F(xiàn)方法沒有有效期,F(xiàn)方法可以支持不同的存儲(chǔ)類型,如果是文件類型的話,默認(rèn)保存在DATA_PATH目錄下面。
快速緩存Data數(shù)據(jù)
F('data',$Data); F('data',$Data,TEMP_PATH);//快速緩存Data數(shù)據(jù),保存到指定的目錄 F('User/data',$Data);//F方法支持自動(dòng)創(chuàng)建緩存子目錄,在DATA_PATH目錄下面緩存data數(shù)據(jù),如果User子目錄不存在,則自動(dòng)創(chuàng)建。
獲取緩存數(shù)據(jù)
$Data = F('data');
刪除緩存數(shù)據(jù)
F('data',NULL);
[查詢緩存]
查詢緩存功能支持所有的數(shù)據(jù)庫(kù),并且支持所有的緩存方式和有效期。
在使用查詢緩存的時(shí)候,只需要調(diào)用Model類的cache方法。
$Model->cache(true)->where('status=1')->select();
如果使用了cache(true),則在查詢的同時(shí)會(huì)根據(jù)當(dāng)前的查詢條件等信息生成一個(gè)帶有唯一標(biāo)識(shí)的查詢緩存,如果指定了key的話,則直接生成名稱為key的查詢緩存。
$Model->cache('cache_name')->select();
默認(rèn)情況下緩存方式采用DATA_CACHE_TYPE參數(shù)設(shè)置的緩存方式(系統(tǒng)默認(rèn)值為File表示采用文件方式緩存),緩存有效期是DATA_CACHE_TIME參數(shù)設(shè)置的時(shí)間,也可以單獨(dú)制定查詢緩存的緩存方式和有效期。
$Model->cache(true,60,'xcache')->select();
如果指定了查詢緩存的key的話,則可以在外部通過S方法直接獲取查詢緩存的內(nèi)容。
$value = S('cache_name');
除了select方法之外,查詢緩存還支持find和getField方法,以及他們的衍生方法(包括統(tǒng)計(jì)查詢和動(dòng)態(tài)查詢方法)。
$Model->where($map)->cache('key',60)->find();
本文主要來自官方文檔,如有問題可參見ThinkPHP3.2官方文檔-緩存
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ThinkPHP實(shí)現(xiàn)一鍵清除緩存方法
- ThinkPHP緩存方法S()概述
- thinkphp緩存技術(shù)詳解
- 修改ThinkPHP緩存為Memcache的方法
- Thinkphp關(guān)閉緩存的方法
- ThinkPHP靜態(tài)緩存簡(jiǎn)單配置和使用方法詳解
- ThinkPHP簡(jiǎn)單使用memcache緩存的方法
- ThinkPHP框架中使用Memcached緩存數(shù)據(jù)的方法
- ThinkPHP實(shí)現(xiàn)批量刪除數(shù)據(jù)的代碼實(shí)例
- 基于ThinkPHP實(shí)現(xiàn)批量刪除
- thinkPHP批量刪除的實(shí)現(xiàn)方法分析
- TP5(thinkPHP框架)實(shí)現(xiàn)后臺(tái)清除緩存功能示例
相關(guān)文章
Yii入門教程之目錄結(jié)構(gòu)、入口文件及路由設(shè)置
本文從YII的目錄結(jié)構(gòu)開始分析,到入口文件分析,到路由設(shè)置詳解,視圖詳解,十分全面的向我們展示了YII框架的方方面面,是篇非常不錯(cuò)的文章,這里推薦給大家。2014-11-11smarty模板引擎從php中獲取數(shù)據(jù)的方法
這篇文章主要介紹了smarty模板引擎從php中獲取數(shù)據(jù)的方法,涉及smarty變量與php代碼的混編技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01ThinkPHP表單自動(dòng)提交驗(yàn)證實(shí)例教程
這篇文章主要介紹了ThinkPHP表單自動(dòng)提交驗(yàn)證實(shí)例教程,非常有實(shí)用價(jià)值,需要的朋友可以參考下2014-07-07Yii實(shí)現(xiàn)顯示靜態(tài)頁(yè)的方法
這篇文章主要介紹了Yii實(shí)現(xiàn)顯示靜態(tài)頁(yè)的方法,結(jié)合實(shí)例形式分析了Yii框架顯示靜態(tài)頁(yè)的步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-04-04php檢查函數(shù)必傳參數(shù)是否存在的實(shí)例詳解
這篇文章主要介紹了php檢查函數(shù)必傳參數(shù)是否存在的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-08-08Laravel中ServiceProvider使用場(chǎng)景示例詳解
這篇文章主要為大家介紹了Laravel中ServiceProvider使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06