tp6中的Cache类报错记录
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); //最后一句写入缓存时传入