我正在尝试使用 Yii 框架 1.1.12 缓存从数据库中检索到的一些结果。简而言之,这是我正在做的事情:
public static function getCategories()
{
if (self::$_categories !== null)
return self::$_categories;
print "Getting categories...";
self::$_categories = Yii::app()->cache->get("categoriesList");
if (self::$_categories === false)
{
$sql = "SELECT id, parent_id, name FROM {{category}} WHERE id > 0 AND is_deleted = 0";
$categoriesList = Yii::app()->db->createCommand($sql)->queryAll();
// Doing some work with $categoriesList and obtaining self::$_categories as the result
// ...
$dependency = new CDbCacheDependency("SELECT MAX(update_time) FROM {{category}}");
Yii::app()->cache->set("categoriesList", self::$_categories, 3600, $dependency);
}
return self::$_categories;
}
使用分析工具,我可以看到一切正常。第一次执行两个查询(每个查询一次):
SELECT MAX(update_time) FROM arrenda_category
SELECT id, parent_id, name FROM arrenda_category WHERE id > 0 AND is_deleted = 0
在进一步的请求中,仅执行第一个请求。
update_time
问题是当我增加表中的最大值arrenda_category
(即使不使用我自己的编辑脚本 - 直接从 MySQL 命令行)并刷新页面时,SELECT MAX(update_time) FROM arrenda_category
查询计数变为等于 2。进一步刷新只会再次执行一次。有趣的是,如果我清除缓存,我SELECT MAX(...) ...
也会执行一次查询。
所以我不明白为什么缓存依赖类的查询会在条件更改时执行两次。我的代码有问题还是有其他问题?
PS我确定SELECT MAX(update_time) FROM arrenda_category
只能在上述功能中执行。我还看到print "Getting categories..."
每个页面请求都会到达该行一次。