2016-03-04 107 views
2

我使用的最新(2016年3月)的模型Yii2的查詢緩存機制的Redis的形式:有沒有辦法使Yii2查詢緩存記錄無效/髒?

$object = $db->cache(function ($db) use($id) { 
    return self::findOne($id); 
}); 

結果,與GUID ID(如「bb83d06878206d758eda3e29082dda4f」)的條目設置保存結果的查詢。

有沒有一種方法可以在每次調用模型的保存方法時使該記錄(基於id)或整個Model的表無效?

E.g.如果保存了用戶記錄,我們想要骯髒該用戶的記錄(或「用戶」表),因此下次我們提取該用戶時,緩存不再有效,並且從DB檢索記錄。

如果可能,我想避免DbDependency(例如在記錄上的「last_updated」字段),因爲如果我沒有弄錯,那是另一個DB查詢。

回答

1

看來,要走的路是TagDependency。使用該標籤,您可以在看到合適的時候使緩存的查詢無效。

創建緩存的查詢賦予它這樣一個獨特的標籤:

$object = $db->cache(function ($db) use($id) { 
    return self::findOne($id); 
}, 0, new TagDependency(['tags' => 'myquerytag'])); 

然後,當你想使它無效,你可以使用「無效」 TagDependency的靜態方法是這樣的:

TagDependency::invalidate(Yii::$app->cache, 'myquerytag'); 

請記住,在這種情況下,對於此查詢,文檔示例中緩存過期時間爲0,但您可以在任何時候認爲合適。

相關問題