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;
}
プロファイリング ツールを使用すると、すべてが機能していることがわかります。最初に両方のクエリが実行されます (各クエリは 1 回):
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 になります。さらに更新すると、再度 1 回しか実行されません。興味深いことに、キャッシュをクリアすると、SELECT MAX(...) ...
クエリも 1 回実行されます。
そのため、条件の変更時にキャッシュ依存クラスのクエリが 2 回実行される理由がわかりません。私のコードに何か問題がありますか?
SELECT MAX(update_time) FROM arrenda_category
PS上記の関数でのみ実行できると確信しています。print "Getting categories..."
また、ページ要求ごとに 1 回行に到達することもわかります。