我有一個我正在緩存的片段,因爲有很多數據庫命中來生成內容。無法刪除使用beginCache創建的緩存項目
main.php:
'cache'=>array(
'class'=>'system.caching.CFileCache'
)
view.php
<?php if($this->beginCache("my_id", array('duration' => 315360000))) { ?>
// lots of heavy stuff
<?php $this->endCache(); } ?>
我的緩存片段只有當我在一個數據庫表中調整配置更改。我試圖找到一種方法來使用「my_id」刪除緩存的項目。 Yii文檔有些誤導,因爲當它談到beginCache
時,它指的是密鑰(「my_id」),但是當它談到從緩存中刪除項目時,它也會談論密鑰,但它不是同一個密鑰! beginCache
本質上是COutputCache
小部件的包裝,因此「my_id」不是緩存中使用的密鑰。
有誰知道如何將「my_id」轉換爲緩存友好的密鑰,以便我可以從緩存中刪除該特定項目。
我試過從CFileCache
延長,但我的密鑰是從COutputCache
生成的,它使用CFileCache
,我不認爲有迴路。我也試過用一個重載版本的COutputCache
開始一個小工具,它的工作原理似乎是一個非常討厭的黑客。
$properties = array();
$properties['id']=Yii::app()->params["cache_name_matrix"];
$cache=$this->beginWidget('MyCOutputCache',$properties);
$key = $cache->getKeyHack();
我目前的解決辦法是刷新整個緩存,但這種擺脫一切,似乎有點重手。
任何想法?
1段:即基本相同,我討厭黑客。似乎沒有辦法從CFileCache訪問COutputCache,因此您必須假定使用了COutputCache並自己生成文件名。第二段:我使用這個,但它不是我想要的,因爲成本太高。我需要檢查的地方有很多,並且緩存活動查詢很複雜,並且必須完成每個請求。對不起,我不能接受這個答案,因爲我想直接刪除緩存項目,因爲它似乎仍然是一個更好的方法。看起來我必須自己實現它,除非有人已經擁有! – 2014-11-18 14:10:12
最後投票,因爲我最終使用CDbCacheDependency,但它仍然不是我想要的。 – 2015-01-09 14:52:28