tp6中的Cache类报错记录

Author Avatar
yyq 2021-07-16 15:51:10
  • 二维码

tp6中的Cache类报错记录

        记录下tp6使用Cache类时的报错问题:


        NO1:在控制器中正常使用Cache缓存的方法,引入think\Facede\Cache,然后可以直接缓存数据

                Cache::set('uname', 'yyq', 3600);

            获取缓存数据:

                $uname = Cache::get('uname');


        NO2:操作了下app()容器注入方式,报错了:

                $app = app();

                // 注册容器对象实例

$app->cache = Cache::class;

// 获取容器中的对象实例

$cache = $app->cache;

                //缓存数据

$cache->set('uname', 'yyqtest', 30);

                //获取缓存数据

                $uname = Cache::get('uname');

            此处会报错:Call to undefined method think\facade\Cache::getReadTimes(),这里的Catch对象需要引入think\Cache,所以两个对象还是有差异的,这里应该是用到了官方说的依赖注入不允许使用Facede门面,记录下

        

        NO3:缓存数组对象时有个问题也顺便记录下,当往缓存的数组追加元素时会导致Cache设置的有效时间失效,变成永久有效。

                Cache::set('uname', ['aaa','bbb'], 3600);

                Cache::push('uname', 'ccc');  //追加元素 此操作会导致set内的3600失效

                $uname = Cache::get('uname'); //获取缓存数组 ['aaa','bbb','ccc']

            解决方式可以在 vendor\topthink\framework\src\think\cache\driver\File.php内重写push方法,将$value参数已自定义的方式追加个有效时间,并在重新            set缓存内容时传入,相当于更新后重新缓存指定时长,重写重要代码如下:

                $expire = isset($uvalue[1])?$uvalue[1]:0;  // $uvalue[1] 从$value参数获取的有效时间,按自己喜欢方式传入

                 。。。。

                $this->set($name, $item, $expire); //最后一句写入缓存时传入

                 

            


上一篇 返回列表 下一篇

发表评论

Tips:评论内容请文明用语