Caching 如何在cakePHP3中使用缓存

Caching 如何在cakePHP3中使用缓存,caching,cakephp,cakephp-3.0,query-builder,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', nu

我正在尝试使用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/userscocontroller.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/目录,但没有生成缓存文件


我遗漏了什么吗?

您没有调用正确的方法,您需要使用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'));
        }

请参见

您的查询永远不会被执行,因此它永远不会被缓存。通过调用
all()
,或
toArray()
,或通过对其进行迭代等方式运行查询

另见


我通过您的两个答案找到了解决方案,最终代码是:

public function test()
{
    $this->autoRender = false;
    $users = $this->Users->find('all')->toArray();
    Cache::write('test_cache', $users, 'bl');
    debug(Cache::read('test_cache', 'bl'));
}

我尝试了你的代码,但我得到了以下错误:
错误:你不能序列化或取消序列化PDO实例如果你使用SQL关键字作为表列名,你可以在config/app.php中为你的数据库连接启用标识符引用。如果要自定义此错误消息,请创建src/Template/error/pdo_error.ctp
我的答案正确,并回答您的缓存问题。查看ndm对其他问题的响应。我尝试了以下代码
public function test(){$this->autoRender=false;$users=$this->users->find('all')->toArray();$users->cache('test_cache','bl');//cache::write('test_cache','users,'bl');debug(cache::read('test_cache','bl');)
缓存看起来正在等待一个不在数组中的对象:
错误:调用数组文件/opt/myapp/src/Controller/userscocontroller.php行中的成员函数Cache():43