關於ThinkPHP實現靜態緩衝和動態緩衝的分析

來源:互聯網
上載者:User
本篇文章主要介紹了ThinkPHP實現靜態緩衝和動態緩衝範例程式碼,具有一定的參考價值,感興趣的小夥伴們可以參考一下

靜態緩衝

要使用靜態緩衝功能,需要開啟HTML_CACHE_ON參數,並且使用HTML_CACHE_RULES配置參數設定靜態緩衝規則檔案。

定義靜態規則

'HTML_CACHE_ON'   =>  true, // 開啟靜態緩衝'HTML_CACHE_TIME'  =>  60,  // 全域靜態緩衝有效期間(秒)'HTML_FILE_SUFFIX' =>  '.shtml', // 設定靜態快取檔案尾碼'HTML_CACHE_RULES' =>   array( // 定義靜態緩衝規則   // 定義格式1 數組方式   '靜態地址'  =>   array('靜態規則', '有效期間', '附加規則'),    // 定義格式2 字串方式   '靜態地址'  =>   '靜態規則', )

靜態快取檔案的根目錄在HTML_PATH定義的路徑下面,並且只有定義了靜態規則的操作才會進行靜態緩衝。 並且靜態緩衝支援不同的儲存類型。 靜態緩衝僅在GET請求下面有效。

靜態地址

全域的操作靜態規則

'read'=>array('{id}',60)//定義所有的read操作的靜態規則

定義全域的控制器靜態規則

'user:'=>array('User/{:action}_{id}','600')//定義所有的User控制器的靜態規則

定義某個控制器的操作的靜態規則//定義Blog控制器的read操作進行靜態緩衝

'blog:read'=>array('{id}',0)//參數為0表示永久緩衝

定義全域的靜態緩衝規則

'*'=>array('{$_SERVER.REQUEST_URI|md5}')//這個屬於特殊情況下的使用,任何模組的操作都適用

靜態規則

靜態規則是用於定義要產生的靜態檔案的名稱,靜態規則的定義要確保不會衝突。

使用系統變數

{$_×××|function}//_GET、_REQUEST、_SERVER、_SESSION、_COOKIE{$_GET.name} {$_SERVER.REQUEST_URI|md5}

使用架構自訂的變數

{:module}/{:controller}_{:action}//{:module} 、{:controller} 和{:action}分別表示當前模組名、控制器名和操作名。

使用_GET變數

{var|function}//{id}其實等效於 {$_GET.id}

直接使用函數

{|function}//{|time},time函數擷取時間後作為檔案名稱

混合定義

'{id},{name|md5}' //在{}之外的字元作為字串對待,如果包含有"/",會自動建立目錄。{:module}/{:action}_{id}//會在靜態目錄下面建立模組名稱的子目錄,然後寫入操作名_id.shtml 檔案。

動態緩衝

[S方法資料緩衝]

緩衝初始化

S(array('type'=>'xcache','expire'=>60));

系統目前已經支援的緩衝類型包括:Apachenote、Apc、Db、Eaccelerator、File、Memcache、Redis、Shmop、Sqlite、Wincache和Xcache。如果S方法不傳入type參數初始化的話,則讀取設定檔中設定的DATA_CACHE_TYPE參數值作為預設類型。同樣的道理,prefix參數如果沒有傳入會讀取設定檔的DATA_CACHE_PREFIX參數值,expire參數沒有傳入則讀取DATA_CACHE_TIME配置值作為預設。

對於全域的緩衝方式,一般我們建議添加prefix(緩衝首碼)參數用以區分不同的應用,以免混淆。

設定緩衝

資料緩衝可以支援緩衝隊列,簡單的說就是可以限制緩衝的數量,只需要在初始化的時候指定length參數。

S('name',$value);S('name',$value,300);//快取資料300秒S('name',$value,array('type'=>'file','expire'=>300));//改變之前的緩衝方式或者更多的參數S(array('type'=>'xcache','length'=>100,'expire'=>60));//系統只會緩衝最近的100條快取資料。

讀取緩衝

$value = S('name');//如果緩衝標識不存在或者已經到期,則返回false,否則返回緩衝值。

刪除緩衝

S('name',null);

注意:使用每種緩衝時,需要ThinkPHP載入對應的驅動檔案,並設定好對應的配置。

使用執行個體

$user = M('User');$value = S('list');if (empty($value)) {  $list = $user->select();  S('list', $list, 3600);  echo '這個是直接從資料庫中讀取的檔案';  dump($list);} else {  echo '這個是快取檔案';  dump($value);}

[快速緩衝]

系統還提供了一個快速緩衝方法F可以用來更快的操作,但是,F方法沒有有效期間,F方法可以支援不同的儲存類型,如果是檔案類型的話,預設儲存在DATA_PATH目錄下面。

快速緩衝Data資料

F('data',$Data);F('data',$Data,TEMP_PATH);//快速緩衝Data資料,儲存到指定的目錄F('User/data',$Data);//F方法支援自動建立緩衝子目錄,在DATA_PATH目錄下面緩衝data資料,如果User子目錄不存在,則自動建立。

擷取快取資料

$Data = F('data');

刪除快取資料

F('data',NULL);

[查詢快取]

查詢快取功能支援所有的資料庫,並且支援所有的緩衝方式和有效期間。

在使用查詢快取的時候,只需要調用Model類的cache方法。

$Model->cache(true)->where('status=1')->select();

如果使用了cache(true),則在查詢的同時會根據當前的查詢條件等資訊產生一個帶有唯一標識的查詢快取,如果指定了key的話,則直接產生名稱為key的查詢快取。

$Model->cache('cache_name')->select();

預設情況下緩衝方式採用DATA_CACHE_TYPE參數設定的緩衝方式(系統預設值為File表示採用檔案方式緩衝),緩衝有效期間是DATA_CACHE_TIME參數設定的時間,也可以單獨制定查詢快取的緩衝方式和有效期間。

$Model->cache(true,60,'xcache')->select();

如果指定了查詢快取的key的話,則可以在外部通過S方法直接擷取查詢快取的內容。

$value = S('cache_name');

除了select方法之外,查詢快取還支援find和getField方法,以及他們的衍生方法(包括統計查詢和動態查詢方法)。

$Model->where($map)->cache('key',60)->find();

本文主要來自官方文檔,如有問題可參見ThinkPHP3.2官方文檔-緩衝

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.