如何在cakePHP3中使用缓存

时间:2018-03-15 16:06:11

标签: caching cakephp cakephp-3.0 query-builder

我正在尝试使用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 /目录创建得很好,但没有生成缓存文件。

我错过了什么吗?

3 个答案:

答案 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'));
}