2

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

$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()

知道我做错了什么吗?

谢谢。

4

1 回答 1

3

根据文档0意味着缓存被禁用。

只需将其设置为某个较大的值。如果您在许多地方需要它,请将其定义为常量以避免混淆幻数反模式,即:

define('IMMUTABLE_CACHE', 60 * 60 * 24 * 365 * 100);

$channels  = Channels::model()->cache(IMMUTABLE_CACHE);
于 2015-01-09T11:11:57.940 回答