【问题标题】:CakePHP 3: Not Sure Why Cache::read() Is Not WorkingCakePHP 3:不确定为什么 Cache::read() 不起作用
【发布时间】:2015-11-02 15:38:38
【问题描述】:

我有一个 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->key 是“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: Writing to a Cache得到了这段代码

【问题讨论】:

  • 所以我认为这与我在执行查询后缓存结果集的面貌有关......我想我正在做一些事情。除了现在我收到一条错误消息“您无法序列化或反序列化 PDO 实例”......仍然需要帮助
  • 好的,现在我认为这与我没有在 Cache::read() 中指定配置有关,因此它使用默认值,但我正在写入“设置”

标签: cakephp cakephp-3.0 cakephp-3.1


【解决方案1】:

我很傻,我意识到我在 Cache:read() 期间遗漏了配置选项,所以它是从默认配置读取的,但我正在写入“设置”配置。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多