CakePHP 3:写入时在Controller中设置缓存持续时间

时间:2015-11-29 20:48:01

标签: cakephp cakephp-3.0

我在我的项目中使用CakePHP 3。我一直在学习新事物。今天我要求使用CakePHP缓存来缓存从数据库中检索的数据。每次我加载一个从数据库返回数据的页面时,大约需要30到40秒。

所以我继续在我的控制器中配置缓存,这显着改善了页面加载从30秒到不到4秒。

现在,我想要做的是设置缓存的持续时间,以便在1小时后清除自身以刷新存储在数据库中的新数据。

这是我执行缓存的代码:

if (!($custstoredata = Cache::read('custstoredata'))) {
  # Code logic
  Cache::write('custstoredata', $customers);
  $this->set('data',$customers);
} else {
  $this->set('data', Cache::read('custstoredata'));
}

在网上做了一些研究之后,我发现我可以使用Cache::set配置持续时间,所以我先前在if语句中添加Cache::set(array('duration' => '+1 hour'));,但是当我在浏览器中加载页面时,我得到这个错误:

  

错误:调用未定义的方法Cake \ Cache \ Cache :: set()

我不确定在将缓存写入文件时,在控制器实时设置缓存持续时间的正确方法是什么。

1 个答案:

答案 0 :(得分:2)

我想我回答了自己的问题。

我在app.php文件中添加了以下缓存配置:

'reports_seconds' => [
            'className' => 'File',
            'path' => CACHE,
            'serialize' => true,
            'duration' => '+60 seconds',
        ]

一旦我添加了上面的代码,我修改了我的if语句,下面的代码修复了问题。

if (!($custstoredata = Cache::read('custstoredata'))) {
    # Code logic
    Cache::write('custstoredata', $customers, $config = 'reports_seconds');
    $this->set('data',$customers);
} else {
    $this->set('data', Cache::read('custstoredata'));
}