我正在尝试使用cakePHP3中的缓存来存储查询结果。
我声明了一个名为“bl”的缓存适配器
config / app.php:
/**
* Configure the cache adapters.
*/
'Cache' => [
'default' => [
'className' => 'File',
'path' => CACHE,
'url' => env('CACHE_DEFAULT_URL', null),
],
'bl' => [
'className' => 'File',
'path' => CACHE . 'bl/',
'url' => env('CACHE_DEFAULT_URL', null),
'duration' => '+1 week',
],
src / Controller / UsersController.php:
use Cake\Cache\Cache;
...
public function test()
{
$this->autoRender = false;
$this->loadModel('Users');
$Users = $this->Users->find('all');
$Users->cache('test', 'bl');
debug(Cache::read('test', 'bl'));
}
调试返回“false”。
tmp / cache / bl /目录创建得很好,但没有生成缓存文件。
我错过了什么吗?
答案 0 :(得分:0)
您没有调用正确的方法,您需要使用Cache :: write()而不是Users-> cache()。我在下面更新了您的代码:
use Cake\Cache\Cache;
...
public function test()
{
$this->autoRender = false;
$this->loadModel('Users');
$Users = $this->Users->find('all');
Cache::write('cache_key_name', $Users, 'bl');
debug(Cache::read('cache_key_name', 'bl'));
}
请参阅https://book.cakephp.org/3.0/en/core-libraries/caching.html#writing-to-a-cache
答案 1 :(得分:0)
您的查询永远不会被执行,因此它永远不会被缓存。通过调用all()
或toArray()
或迭代它等运行查询...
另见
答案 2 :(得分:0)
我能够找到你的2个答案的解决方案,最终的代码是:
public function test()
{
$this->autoRender = false;
$users = $this->Users->find('all')->toArray();
Cache::write('test_cache', $users, 'bl');
debug(Cache::read('test_cache', 'bl'));
}