我們都知道,yii2的快取是支援依賴的,就是我們設定的快取是否失效除了過期時間還決定於它所依賴的東東是否變化。用好依賴將大大提高我們使用快取的效果,本節講解yii2快取的5種依賴方式。
還是先列某
yiicachingdbdependency
yiicachingexpressiondependency
yiicachingfiledependency
yiicachingtagdependency
yiicachingchaineddependency
begin...
我們可以將sql語句直接作為依賴條件。當資料庫查詢出的內容發生變化時候,快取即會受到影響。
假設我當前要搜尋出所有的分類資訊並快取起來,每3000秒更新一次或當分類有變化是後自動更新,使用dbdependency我們可以輕鬆實現。
$dependency = new \yii\caching\dbdependency(['sql'=>'select count(*) from category']);
$cache->add('category',function($cache),3600,dependency);
使用快取獲取資料
$cache->get("category");
**執行後,當超過3000秒或分類字段條數有變化,都將快取設定為失效。該依賴的推薦為依賴裡執行的sql語句所損耗的資源最好小於快取所帶來的損耗。
指定的 php 表示式執行結果發生變化,則快取變化,這裡的表示式為整個php,而不侷限於yii。
$cache->add("hy","hello yii",3000,$dependency);
獲取快取資料
$cache->get("hy");
如上面**,我們在3000之內使用hy都直接從快取讀取hello yii,但是當使用快取的頁面url ?id=xx發生變化的時候則失敗,返回flase
將快取和檔案繫結在一起。如果檔案的內容發生變化,那麼快取將會收到影響。而yii是根據這個檔案的最後修改時間來判斷其內容是否變化的。
依賴檔案 hello.txt,其內容為a
設定依賴
$cache->add("hy","hello yii",3000,$dependency);
獲取快取資料
$cache->get("hy");
該類依賴的意思是某個或某些快取是否失效除了由時間決定,還有乙個標籤決定,舉例說明
use yii\caching\tagdependency;
$cache->add("abc","hello yii",3000,new tagdependency(['tags' => 'num']));
此刻我們設定了乙個快取abc,它依賴於標籤num
當我們在其他的**中執行了
use yii\caching\tagdependency;
乙個系統中的資料是彼此相連的,快取的依賴也可能出現多種聯絡,使用tagdependency可以將一組快取標記為同乙個標籤,然後使用invalidate函式將這組快取統一失效,但是這樣還不足以滿足千變萬化的依賴關係。
因此chaineddependency出現了,我們可以將一系列的快取依賴使用 chaineddependency 組合起來,這樣當這個組合中的某個或全部依賴發生變化後,將直接影響到快取。
現在我們仍然通過乙個例子說明,假設我們的乙個快取同時依賴於兩個依賴。
$sqldependency = new \yii\caching\dbdependency(['sql'=>'select count(*) from category']);
$cache->set('abc', 'hello yii', 3000, new chaineddependency([
'dependonall'=>true,
'dependencies' => [$filedependency, $sqldependency]
]));
這樣,當$filedependency和$sqldependency中任何乙個依賴發生變化後都會引起快取的失效,這裡要注意乙個問題 dependonall(預設為true),當為true時,只要依賴組合中的乙個發生變化則快取失效,否則必須每個依賴都變化才會引起快取的失效。
北哥大話Yii2快取機制 File快取
有的兄弟一定會說,file快取有什麼好講的那?不就是乙個set,然後在乙個get麼?那你知道的只是皮毛 的確如大家所說,快取從表現層看就是乙個set 放資料 然後再乙個get 拿資料 但是請記住,這樣是不夠的,如果你不了解每個快取的實現原理 儲存特點等等,你是無法使用對場景的,什麼時候用file快取...
快取技術之 Yii2效能優化之 快取依賴
yii中的快取依賴,簡單來說就是將快取和另外乙個東西繫結在一起,如果另外乙個東西發生變化,那麼快取也將發生變化。有點兒類似於js中的觸發事件 但是也不那麼像 快取的變動是依賴的東西所導致的。依賴可以是檔案 資料庫 甚至是一些表示式。功能十分強大。yii提供了5中依賴方法,我們這裡介紹其中的3種常用依...
快取技術之 Yii2效能優化之 快取依賴
yii中的快取依賴,簡單來說就是將快取和另外乙個東西繫結在一起,如果另外乙個東西發生變化,那麼快取也將發生變化。有點兒類似於js中的觸發事件 但是也不那麼像 快取的變動是依賴的東西所導致的。依賴可以是檔案 資料庫 甚至是一些表示式。功能十分強大。yii提供了5中依賴方法,我們這裡介紹其中的3種常用依...