ThinkPHP3 1快速入門(10)快取

2022-04-06 15:32:56 字數 4963 閱讀 4655

在專案中,合理的使用快取對效能有較大的幫助。thinkphp提供了方便的快取方式,包括資料快取、靜態快取和查詢快取等,支援包括檔案方式、apc、db、memcache、shmop、sqlite、redis、eaccelerator和xcache在內的動態資料快取型別,以及可定製的靜態快取規則,並提供了快捷方法進行訪問操作。

3.1.2版本cache方法已經併入s方法,所以cache方法不再建議使用,直接使用s方法即可,和下文描述的cache方法用法一致

1 快取初始化

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

複製**

快取初始化可以支援的引數根據不同的快取方式有所區別,常用的引數是:

expire

快取有效期(時間為秒)

prefix

快取標識字首

type

快取型別

核心版本只有file快取方式的支援,其他的快取方式支援需要**單獨的快取驅動,並放入系統目錄的extend/driver/cache/下面,否則會出現不支援快取型別的錯誤提示。

有些快取方式會有一些自身特殊的引數,例如memcache快取,還需要配置其他的引數: cache(array('type'=>'memcache','host'=>'192.168.1.10','port'=>'11211','prefix'=>'think','expire'=>60));

複製**

對於全域性的快取方式,一般我們建議新增prefix(快取字首)引數用以區分不同的應用,以免混淆。

2 快取設定

cache('a',$value);

複製**

會按照快取初始化時候的引數進行快取資料,也可以在快取設定的時候改變引數,例如: cache('a',$value,300);//快取資料300秒

複製**

甚至改變之前的快取方式或者更多的引數: cache('a',$value,array('type'=>'file','expire'=>300));//採用檔案方式快取資料300秒

複製**

如果你在快取設定的時候採用上面的陣列方式傳入引數的話,會影響到後面的快取訪問。

3 快取讀取

$value=cache('a');

複製**

快取讀取的是前面快取設定的值,這個值會受快取初始化或者快取設定的時候傳入的引數影響。

如果快取標識不存在或者已經過期,則返回false,否則返回快取值。

4 快取刪除

cache('a',null);

複製**

刪除快取標識為name的快取資料。

如果要切換快取方式,可以再次進行快取初始化操作或者使用下面的方式: $cache=cache(array('type'=>'xcache','prefix'=>'think','expire'=>600)); $cache->name='value';//設定快取 $value=$cache->name;//獲取快取 unset($cache->name);//刪除快取

複製**

如果你設定了快取字首的話,對應的快取操作只是對應該快取字首標識的,不會影響其他的快取。

資料快取可以支援快取佇列,簡單的說就是可以限制快取的數量,只需要在初始化的時候指定length引數: cache(array('type'=>'xcache','length'=>100,'expire'=>60));

複製**

設定了length引數後,系統只會快取最近的100條快取資料。

如果你僅僅是希望用檔案的方式快取一些簡單的資料,並且沒有有效期的概念,那麼系統還提供了乙個快速快取方法f可以用來更快的操作。

快速快取data資料,預設儲存在data_path目錄下面 f('data',$data);

複製**

快速快取data資料,儲存到指定的目錄 f('data',$data,temp_path);

複製**

獲取快取資料 $data=f('data');

複製**

刪除快取資料 f('data',null);

複製**

f方法支援自動建立快取子目錄,在data_path目錄下面快取data資料,如果user子目錄不存在,則自動建立: f('user/data',$data);

複製**

3.1.2版本開始f方法支援使用萬用字元批量刪除功能,使用如下: f('user/*',null);

複製**

表示刪除data_path.'user/'目錄下面的資料快取。

系統內建的資料字段資訊快取就是用了快速快取機制。

對於及時性要求不高的資料查詢,我們可以使用查詢快取功能來提高效能,而且無需自己使用快取方法進行快取和獲取。

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

在使用查詢快取的時候,只需要呼叫model類的cache方法,例如: $model->cache(true)->select();

複製**

如果使用了cache(true) ,則在查詢的同時會根據當前的查詢sql生成查詢快取,預設情況下快取方式採用data_cache_type引數設定的快取方式(系統預設值為file表示採用檔案方式快取),快取有效期是data_cache_time 引數設定的時間,也可以單獨制定查詢快取的快取方式和有效期: $model->cache(true,60,'xcache')->select();

複製**

表示當前查詢快取的快取方式為xcache,並且快取有效期為60秒。

同樣的查詢,如果沒有使用cache方法,則不會獲取或者生成任何快取,即便是之前呼叫過cache方法。

查詢快取只是供內部呼叫,如果希望查詢快取開放給其他程式呼叫,可以指定查詢快取的key,例如: $model->cache('cache_name',60)->select();

複製**

則可以在外部通過s方法直接獲取查詢快取的內容, $value=s('cache_name');

複製**

除了select方法之外,查詢快取還支援find和getfield方法,以及他們的衍生方法(包括統計查詢和動態查詢方法)。具體應用的時候可以根據需要選擇快取方式和快取有效期。

要使用靜態快取功能,需要開啟html_cache_on 引數,並且使用html_cache_rules配置引數設定靜態快取規則檔案 。

靜態規則的定義方式如下: 'html_cache_on'=>true,//開啟靜態快取 'html_file_suffix'=>'.shtml',//設定靜態快取字尾為.shtml 'html_cache_rules'=>array( 'actionname(小寫)'=>array('靜態規則','靜態快取有效期','附加規則'), 'modulename(小寫)'=>array('靜態規則','靜態快取有效期','附加規則'), 'modulename(小寫):actionname(小寫)'=>array('靜態規則','靜態快取有效期','附加規則'), '*'=>array('靜態規則','靜態快取有效期','附加規則'), //…更多操作的靜態規則 )

複製**

靜態快取檔案的根目錄在html_path 定義的路徑下面,並且只有定義了靜態規則的操作才會進行靜態快取。

第一種是定義全域性的操作靜態規則,例如定義所有的read操作的靜態規則為: 'read'=>array('','60')

複製**

其中, 表示取$_get['id'] 為靜態快取檔名,第二個引數表示快取60秒

第二種是定義全域性的模組靜態規則,例如定義所有的user模組的靜態規則為: 'user:'=>array('user/_','600')

複製**

其中, 表示當前的操作名稱

第三種是定義某個模組的操作的靜態規則,例如,我們需要定義blog模組的read操作進行靜態快取 'blog:read'=>array('',0)

複製**

有個別特殊的規則,例如空模組和空操作的靜態規則的定義,可以使用下面的方式: 'empty:index'=>array('_',0)//定義空模組的靜態規則 'user:_empty'=>array('user/',0)//定義空操作的靜態規則

複製**

第四種方式是定義全域性的靜態快取規則,這個屬於特殊情況下的使用,任何模組的操作都適用,例如 '*'=>array(''),

複製**

根據當前的url進行快取

靜態規則是用於定義要生成的靜態檔案的名稱,靜態規則的定義要確保不會衝突,寫法可以包括以下情況:

1、使用系統變數 包括 _get _request _server _session _cookie

格式:

例如:

複製**

2、使用框架特定的變數

例如:、 、 和 分別表示當前專案名、分組名、模組名和操作名。

3、使用_get變數

也就是說 其實等效於

4、直接使用函式

例如:

複製**

5、支援混合定義,例如我們可以定義乙個靜態規則為: ','

複製**

在{}之外的字元作為字串對待,如果包含有」/」,會自動建立目錄。

例如,定義下面的靜態規則: /_

複製**

則會在靜態目錄下面建立模組名稱的子目錄,然後寫入操作名_id.shtml 檔案。

靜態有效時間 單位為秒。如果不定義,則會獲取配置引數html_cache_time 的設定值,如果定義為0則表示永久快取。

附加規則通常用於對靜態規則進行函式運算,例如 'read'=>array('think,','60','md5')

複製**

翻譯後的靜態規則是 md5('think'.$_get['id']. ', '.$_get['name']);

和靜態快取相關的配置引數包括: html_cache_on是否開啟靜態快取功能 html_file_suffix靜態檔案字尾慣例配置的值是.html html_cache_time預設的靜態快取有效期預設60秒可以在靜態規則定義覆蓋

複製**

要善於利用thinkphp的快取功能,更重要的是區分什麼時候用何種快取方式更加有效。快取也不是萬能的,沒有快取是萬萬不能的^_^

ThinkPHP3 1快速入門(9)變數輸出

這一篇我們來詳細了解下如何在模板中使用標籤輸出模板變數。變數輸出的方法很簡單,例如,在控制器中我們給模板變數賦值 name thinkphp this assign name name this display 複製 然後就可以在模板中使用 hello,複製 模板編譯後的結果就是 hello,複製 ...

ThinkPHP3 1快速入門(15)模板布局

thinkphp的模板引擎內建了布局模板功能支援,可以方便的實現模板布局以及布局巢狀功能。有三種布局模板的支援方式 這種方式僅需在專案配置檔案中新增相關的布局模板配置,就可以簡單實現模板布局功能,比較適用於全站使用相同布局的情況,需要配置開啟layout on 引數 預設不開啟 並且設定布局入口檔名...

ThinkPHP3 1快速入門(21)IP位址定位

可以在官網的 ip定位擴充套件類庫,或者 擴充套件包 裡面也已經包含該擴充套件類了。如果是單獨 的上傳類庫,把解壓後的iplocation.class.php 放入thinkphp extend library org net 如果沒有請手動建立 目錄下面。如果你僅僅需要獲取使用者訪問的ip位址,那...