这看起来很简单,应该是Yii基本代码的一部分,但我无法在任何地方找到解决方案。这是我的情景。
1)用户更新他们的记录(使用beforesave设置缓存值,随每次新保存更改,php unique())
public function beforeSave()
{
Yii::app()->cache->set('userupdate'.$this->id,uniqid());
return parent::beforeSave();
}
2)使用第一步中的缓存值缓存用户数据,作为模型的loadModel函数中的依赖项。
$model=Users::model()->cache(1800, $dependency)->findByPk($id);
3)用户查看调用以检索其数据的页面。 Yii评估请求以查看从步骤1中缓存的值是否已更改,如果它没有从缓存中提取,如果它已从db中提取。
在阅读此页面(http://www.yiiframework.com/doc/guide/1.1/en/caching.data)时,如果文件日期发生变化,则该函数具有该功能,但变量不会更改。在这件事情上的任何帮助都会很棒,因为我不知道如何实现这一点。
注意:我需要使用缓存来保存变量,因为我正在运行我的应用程序的多个实例,并且需要在每个服务器和所有用户之间共享(因此会话将无法工作)。
答案 0 :(得分:0)
其中一个依赖选项是CExpressionDependency。您可以将当前缓存的beforeSave值与您从loadModel调用获得的值进行比较。
答案 1 :(得分:0)
在与之斗争之后,我找到了解决方案,不觉得它完全漂亮,但确实有效。对清洁方式的任何反馈都非常感激。
$cache = Yii::app()->cache;
$key1 = 'userupdate'.$id; //main cache value
$key2 = '2userupdate'.$id; //will equal main cache when query is cached
$cache1 = $cache['userupdate'.$id];
$cache2 = $cache['2userupdate'.$id];
$dependency = new CExpressionDependency("Yii::app()->cache->get('$key1') == Yii::app()->cache->get('$key2')");
$model=Users::model()->cache(1800,$dependency)->findByPk($id);
if($cache1 != $cache2)
$cache['2userupdate'.$id] = $cache['userupdate'.$id];