關於ThinkPHP實作靜態快取與動態快取的分析

不言
發布: 2023-03-30 19:24:02
原創
1574 人瀏覽過

本篇文章主要介紹了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官方文檔-快取

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關建議:

ThinkPHP實作一鍵清除快取方法

PHP清除快取的幾種方法總結

#

以上是關於ThinkPHP實作靜態快取與動態快取的分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板