我有一个 SettingsSiteTable 对象,其中包含以下方法,用于读取数据库中的设置并将结果存储在缓存中。
// GET ALL CONFIG SETTINGS
function getConfigs(){
if(($settings_site = Cache::read($this->key)) === false) {
$settings_site = $this->find('list', [
'keyField' => 'key',
'valueField' => 'value'
])->toArray();
Cache::write($this->key, $settings_site, 'settings');
}
return $settings_site;
} // END GET CONFIGS FUNCTION
$ this->键是'SettingsSite',似乎没有问题。我还添加了Cake \ Cache \ Cache到表对象文件。
app.php 文件中的缓存配置如下:
'Cache' => [
'default' => [
'className' => 'File',
'path' => CACHE,
],
'settings' => [
'className' => 'File',
'duration' => '+6 hours',
'path' => CACHE . 'settings/',
],
'_cake_core_' => [
// ...
],
'_cake_model_' => [
// ...
],
],
缓存似乎成功保存。我能够查看位于 tmp / cache / settings / settings_site 的缓存文件(不确定文件扩展名是什么)
但是,如果我更改数据库中的数据并刷新页面,则会显示更新的信息,这意味着它没有正确地从缓存中读取,而是重新查询结果。
我做错了什么?我直接从3.X Cookbook: Writing to a Cache
获得了此代码答案 0 :(得分:1)
愚蠢我知道我在Cache期间遗漏了配置选项:read()所以它是从默认配置中读取的,但我正在写入'settings'配置。
// GET ALL CONFIG SETTINGS
function getConfigs(){
if(($settings_site = Cache::read($this->key, 'settings')) === false) {
$settings_site = $this->find('list', [
'keyField' => 'key',
'valueField' => 'value'
])->toArray();
Cache::write($this->key, $settings_site, 'settings');
}
return $settings_site;
} // END GET CONFIGS FUNCTION