【问题标题】:how to clear the cache in a yii query如何清除yii查询中的缓存
【发布时间】:2016-10-13 19:50:20
【问题描述】:

我正在利用 Yii 的 sql 缓存来显示表格中的数据(见下文)

$results = Yii::app()->db->cache(1000)->createCommand($sql)->bindValues($params)->queryAll(); 

但问题是,我删除了一个值后,这个查询仍然显示已经删除的值。在我的delete语句中,如何强制将缓存标记为脏,使上面的语句不显示不再存在的旧删除数据?

供您参考:http://www.yiiframework.com/doc/guide/1.1/en/caching.data

【问题讨论】:

    标签: caching yii


    【解决方案1】:

    您可以在缓存中添加dependency,而不是在删除期间使缓存失效。如果依赖项发生更改,则缓存无效。例如如果您使用的是自动递增的 id,您可以将表的 max(id) 设置为依赖项:

    $results = Yii::app()->db->cache(
            1000, 
            new CDbDependancy("SELECT max(id) FROM table")
        )->createCommand($sql)->bindValues($params)->queryAll(); 
    

    【讨论】:

      【解决方案2】:

      如果你在redis中缓存查询结果,你可以打开Yii调试模式,找到redis中用于你的查询结果的redis键,然后删除redis键。

      调试日志如下:

      2016/10/18 19:25:29 [trace] [system.caching.CRedisCache] Serving "Yii:dbquery:cc6401a98f142e12f880dc4ab9447813811d1saasase0e" from cache
      2016/10/18 19:25:29 [trace] [system.db.CDbCommand] Query result found in cache
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-02
        • 2011-06-01
        • 2010-12-24
        • 1970-01-01
        • 2013-03-11
        • 2013-07-24
        • 1970-01-01
        • 2014-12-17
        相关资源
        最近更新 更多