我在项目中使用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()
当缓存写入文件时,我不确定在控制器中实时设置缓存持续时间的正确方法是什么。
我想我已经回答了自己的问题。
我在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'));
}