以這段代碼爲例:Yii - 數據庫依賴性緩存是否可以跨多個操作工作?
public function actionPostOneWay($postId)
{
$dependency = new CDbCacheDependency('SELECT publish_date FROM posts WHERE id = :post_id;');
$dependency->params = array('post_id'=>$postId);
$post = Post::model()->cache(59, $dependency)->findByPk($postId);
// process post one way
}
public function actionPostAnotherWay($postId)
{
$dependency = new CDbCacheDependency('SELECT publish_date FROM posts WHERE id = :post_id;');
$dependency->params = array('post_id'=>$postId);
$post = Post::model()->cache(59, $dependency)->findByPk($postId);
// process post another way
}
所以將訪問/postOneWay
和/postAnotherWay
重複使用相同的緩存對象,或將他們創建自己的緩存中的對象?
哇!沒有預料到這一級別的細節。謝謝!其中大部分是有道理的。我對這一行感到困惑:「如果指定不同的SQL來在兩個操作中創建CDbCacheDependency,則由於CDbCacheDependency的實例會與查詢的結果一起被緩存序列化,所以只有其中一個(先執行)會在緩存期間有意義」。你的意思是說,依賴實例正在被緩存和重用? – HyderA
是的,我的意思是這個。將使用該值緩存依賴項實例,並在下一次在'if(($ result = $ cache-> get($ cacheKey))!<= false>'中檢索緩存值時''此實例將用於確定數據庫執行依賴關係查詢時是否發生了某些更改,並將結果與之前評估的結果(設置高速緩存值時)進行比較。您可以通過將'CProfileLogRoute'添加到應用程序配置的'log'組件並將'db'組件的'enableProfile'標誌設置爲'true'來測試它。 – Ezze