OpenCart 2中如何添加Redis缓存keys方法?调用时提示未定义
解决Redis缓存类keys方法调用报错问题
问题分析
调用$this->cache->keys('*')时触发Uncaught Error: Call to undefined method Cache::keys(),但set/get方法正常工作,核心原因有两个:
- 框架顶层的Cache抽象类未声明
keys方法,$this->cache是基于抽象类的实例,PHP会严格校验抽象类定义的方法列表; - 现有Redis类的
keys方法未添加CACHE_PREFIX前缀,会导致获取的key与实际存储的缓存key不匹配。
解决步骤
1. 补充Cache抽象类的方法声明
找到system/library/cache.php文件,在抽象类中添加keys方法的抽象声明:
abstract class Cache { protected $expire; public function __construct($expire) { $this->expire = $expire; } abstract public function get($key); abstract public function set($key, $value); // 新增keys方法的抽象声明 abstract public function keys($pattern); }
2. 修正Redis类的keys方法逻辑
修改system/library/cache/redis.php中的keys方法,加上缓存前缀,和get/set方法保持逻辑一致:
public function keys($key) { return $this->cache->keys(CACHE_PREFIX . $key); }
验证
修改完成后,重新调用$this->cache->keys('*'),即可正常获取带缓存前缀的所有key,不会再触发方法未定义的错误。
内容的提问来源于stack exchange,提问作者bobi
相关产品推荐
相关产品推荐

