我正在使用APC缓存进行昂贵的查询,以查找相关文件,付款,事件等工作。 我想知道在Doctrine 1中是否有可用的缓存失效解决方案。*。
我提出了以下工作解决方案,它确实有效,我只是不想发明一个轮子。
如果有更好的/其他现有解决方案,请建议我。
记录侦听器尝试在postSave
事件:
class My_Doctrine_Record_Listener_ClearCache extends Doctrine_Record_Listener
{
/**
* Clear cache by table tags
*
* @param Doctrine_Event $event
* @return null
*/
public function postSave(Doctrine_Event $event)
{
$cache = new Doctrine_Cache_Apc();
/* @var $model Doctrine_Record */
$model = $event->getInvoker();
$name = get_class($model);
/* @var $table Doctrine_Table */
$table = $model->getTable($name);
if (method_exists($table, 'getCacheTags')) {
foreach ($table->getCacheTags() as $tag) {
$id = preg_replace('/%([\w]+)%/e', '$model->{\\1}', $tag);
$cache->delete($id);
}
}
}
}
这就是我在表格中所拥有的:
class FileTable extends Doctrine_Table
{
/* ... */
public function getCacheTags()
{
return array(
'job_view_%job_id%'
);
}
/* ... */
}
class JobTable extends Doctrine_Table
{
/* ... */
public function getCacheTags()
{
return array(
'job_view_%id%'
);
}
/* ... */
}
答案 0 :(得分:0)
以上解决方案已经在生产环境中使用了7年,因此可以肯定地说-它确实可以很好地工作。