具有无限过期时间的 Yii 查询缓存
Yii query caching with infinite expire time
我正在使用具有无限过期时间的查询缓存。例如考虑下面的一段代码:
$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()
缓存 key/value 对
知道我是否做错了什么吗?
谢谢。
根据文档 0
表示缓存已禁用。
只需将其设置为某个较大的值即可。如果你在很多地方需要它,就把它定义为常量,以避免混淆magic number antipattern,即:
define('IMMUTABLE_CACHE', 60 * 60 * 24 * 365 * 100);
$channels = Channels::model()->cache(IMMUTABLE_CACHE);
我正在使用具有无限过期时间的查询缓存。例如考虑下面的一段代码:
$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()
知道我是否做错了什么吗?
谢谢。
根据文档 0
表示缓存已禁用。
只需将其设置为某个较大的值即可。如果你在很多地方需要它,就把它定义为常量,以避免混淆magic number antipattern,即:
define('IMMUTABLE_CACHE', 60 * 60 * 24 * 365 * 100);
$channels = Channels::model()->cache(IMMUTABLE_CACHE);