【问题标题】:Yii query caching with infinite expire time具有无限过期时间的 Yii 查询缓存
【发布时间】:2015-01-09 10:09:24
【问题描述】:

我正在使用具有无限过期时间的查询缓存。以下面的一段代码为例:

$channels  = Channels::model()->cache(0)->findAll(array('order' => 'channel_name'));

该语句应该在缓存中的条目中进行并且正在执行,但它不是从缓存中获取数据,而是直接进入数据库获取结果。

同时,如果我提供的过期时间 > 0(零),那么它可以顺利运行。例如:

    $channels  = Channels::model()->cache(20)->findAll(array('order' => 'channel_name'));

完美运行 20 秒并从缓存中获取结果。

我们在启用日志并查看分析后得到确认。

无限过期时间也适用于使用Yii::app()->cache->set()Yii::app()->cache->get() 缓存键/值对

知道我做错了什么吗?

谢谢。

【问题讨论】:

    标签: php caching yii query-cache


    【解决方案1】:

    根据文档0 表示缓存已禁用。

    只需将其设置为某个较大的值即可。如果你在很多地方需要它,将它定义为一个常量,以避免混淆magic number antipattern,即:

    define('IMMUTABLE_CACHE', 60 * 60 * 24 * 365 * 100);
    
    $channels  = Channels::model()->cache(IMMUTABLE_CACHE);
    

    【讨论】:

    • 请帮我找到它说“0”是禁用缓存的地方。此外,启用日志它清楚地表明正在准备缓存。就我而言,我使用的是 Sqlite,我可以清楚地看到 '0' 过期时间的 'INSERT' 命令。
    • active record class docs。这与cache 组件不同。
    • 谢谢彼得。我明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2019-05-08
    相关资源
    最近更新 更多