CakePHPでクエリのResultSetをデフォルト設定でキャッシュした場合、有効期間はどれくらい?
業務でCakePHPのクエリキャッシュを使用する機会があり、デフォルト設定でコーディングしていましたが、デフォルト設定の場合のキャッシュの有効期間が曖昧だったため備忘録として残します!
クエリ結果のキャッシュ方法
$query->cache('recent_companies');
これだけでクエリのResultSetのキャッシュが有効になります。
もしcache()
に1つだけの引数を渡した場合は、'default'
のキャッシュ・コンフィグが使われることになります。
独自の設定を使用したい場合は、第2引数でキャッシュ・コンフィグを指定できます。
// 文字列でConfig名を指定する
$query->cache('recent_companies', 'dbResults');
// CacheEngineのインスタンスを指定する
$query->cache('recent_companies', $memcache);
(本題)デフォルト設定でキャッシュした際の有効期間はどれくらい?
'Cache' => [
'default' => [
'className' => 'File',
'path' => CACHE,
'url' => env('CACHE_DEFAULT_URL', null),
],
'_cake_core_' => [
'className' => 'File',
'prefix' => 'myapp_cake_core_',
'path' => CACHE . 'persistent/',
'serialize' => true,
'duration' => '+1 years',
'url' => env('CACHE_CAKECORE_URL', null),
'mask' => 0666,
],
'_cake_model_' => [
'className' => 'File',
'prefix' => 'myapp_cake_model_',
'path' => CACHE . 'models/',
'serialize' => true,
'duration' => '+1 years',
'url' => env('CACHE_CAKEMODEL_URL', null),
'mask' => 0666,
],
],
config/app.phpファイルを見ると_cake_core_
や_cake_model_
にはduration
オプションが設定されており、キャッシュの有効期間が1年であることがわかります。
_cake_core_
: ファイル構成の保存と、国際化と地域化ファイルの結果のパースに使用
_cake_model_
: アプリケーション上のモデルに対するスキーマの説明を保存するために使用
duration
オプション: キャッシュ設定内のアイテムの有効期間を指定
しかし、default
にはduration
オプションが設定されていません。
では、デフォルト設定のキャッシュ有効期間はどれくらいなのでしょうか?
答えはvendor/cakephp/cakephp/src/Cache/Engine
ディレクトリ配下で確認できます!
Engineディレクトリ配下には組み込みのキャッシュエンジンに対応したファイルが格納されており、各キャッシュエンジンの設定やメソッドが確認できます。
default
ではFileEngineが指定されているためEngine/FileEngine.php
の設定を確認します。
protected $_defaultConfig = [
'duration' => 3600,
'groups' => [],
'isWindows' => false,
'lock' => true,
'mask' => 0664,
'path' => null,
'prefix' => 'cake_',
'probability' => 100,
'serialize' => true
];
デフォルトコンフィグを確認するとduration
オプションに3600が設定されていることがわかります。
単位を確認するために、試しに5に設定してクエリの発行数を確認すると5秒後にクエリが再発行されるので、単位は「秒」であることがわかります。
よって、デフォルト設定でキャッシュした場合の有効期間は1時間であることがわかりました!
Discussion