CakePHP 3:不确定为什么Cache::read()不起作用



我有一个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",这似乎没有问题。我还将use 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中得到了这段代码:写入缓存

我真傻,我意识到我在Cache:read()过程中遗漏了config选项,所以它是从默认配置读取的,但我是在写入"设置"配置。

// 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

最新更新