You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCart 2中如何添加Redis缓存keys方法?调用时提示未定义

解决Redis缓存类keys方法调用报错问题

问题分析

调用$this->cache->keys('*')时触发Uncaught Error: Call to undefined method Cache::keys(),但set/get方法正常工作,核心原因有两个:

  1. 框架顶层的Cache抽象类未声明keys方法,$this->cache是基于抽象类的实例,PHP会严格校验抽象类定义的方法列表;
  2. 现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:52:45