𝕷𝖎𝖑𝖏𝖆𝖈𝖐 发表于 2025-3-3 18:11:26

DX3.4 报 Call to undefined method Redis::getMultiple() 无法开启redis扩展 New

整不会了
系统Debian12和Ubantu22 搭 宝塔9.0.0和9.4.4
这个做实验的是全新的Discuz_X3.4_SC_UTF8_20230520版本




我知道答案 回答被采纳将会获得1 贡献 已有1人回答

拾光 发表于 2025-3-3 18:11:48

X3.5的 开始redis扩展 就一切正常

X34和X35在同一个站点内不同二级目录里

Discuz智能体 发表于 2025-3-18 17:40:46

你好,根据你描述的问题,`Call to undefined method Redis::getMultiple()` 这个错误通常是由于 PHP 的 Redis 扩展版本与 Discuz! 的 Redis 缓存类不兼容导致的。`getMultiple()` 方法是 Redis 扩展中的一个方法,但在某些版本的 Redis 扩展中可能不存在。

### 解决方法:

1. **检查 Redis 扩展版本**:
   首先,你需要确认你安装的 Redis 扩展版本是否支持 `getMultiple()` 方法。你可以通过以下命令查看 Redis 扩展的版本:
   php -m | grep redis
   或者通过 `phpinfo()` 查看 Redis 扩展的详细信息。

2. **升级 Redis 扩展**:
   如果你使用的是较旧的 Redis 扩展版本,建议升级到最新版本。你可以通过以下命令升级 Redis 扩展:
   pecl install redis
   或者通过宝塔面板的 PHP 管理界面,选择对应的 PHP 版本,点击“安装扩展”,然后选择 Redis 扩展进行安装或升级。

3. **修改 Discuz! 的 Redis 缓存类**:
   如果你无法升级 Redis 扩展,或者升级后问题仍然存在,你可以尝试修改 Discuz! 的 Redis 缓存类,避免使用 `getMultiple()` 方法。你可以找到 `source/class/class_redis.php` 文件,将 `getMultiple()` 方法替换为其他兼容的方法。

   例如,你可以将 `getMultiple()` 方法替换为多次调用 `get()` 方法:
   public function getMultiple($keys) {
       $result = array();
       foreach ($keys as $key) {
         $result[$key] = $this->get($key);
       }
       return $result;
   }

4. **检查 PHP 配置**:
   确保你的 PHP 配置文件中已经正确启用了 Redis 扩展。你可以通过编辑 `php.ini` 文件,确保有以下配置:
   extension=redis.so

5. **重启 PHP 和 Web 服务器**:
   在修改完配置后,记得重启 PHP 和 Web 服务器(如 Nginx 或 Apache)以使更改生效。

### 总结:
这个问题通常是由于 Redis 扩展版本不兼容导致的。你可以通过升级 Redis 扩展或修改 Discuz! 的 Redis 缓存类来解决这个问题。如果你有其他问题或需要进一步的帮助,请随时联系我。

希望这些信息对你有帮助!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-18 17:41:46

你好,根据你描述的问题,`Call to undefined method Redis::getMultiple()` 这个错误通常是由于 PHP 的 Redis 扩展版本不兼容导致的。`getMultiple()` 方法在较新的 Redis 扩展版本中已经被移除或替换为其他方法。

### 解决方法:

1. **检查 Redis 扩展版本**:
   首先,你需要确认当前安装的 Redis 扩展版本。可以通过以下命令查看:
   php -m | grep redis
   或者通过 `phpinfo()` 查看 Redis 扩展的详细信息。

2. **降级 Redis 扩展版本**:
   如果你使用的是较新的 Redis 扩展版本(例如 5.x 或更高版本),可以尝试降级到 4.x 版本,因为 `getMultiple()` 方法在 4.x 版本中是存在的。

   你可以通过以下命令卸载当前 Redis 扩展并安装指定版本:
   pecl uninstall redis
   pecl install redis-4.3.0
   安装完成后,重启 PHP 服务:
   service php-fpm restart

3. **修改 Discuz 代码**:
   如果你不想降级 Redis 扩展版本,可以尝试修改 Discuz 的代码,将 `getMultiple()` 方法替换为 `mget()` 方法。`mget()` 是 Redis 中用于获取多个键值的方法。

   找到调用 `getMultiple()` 方法的代码部分,将其替换为:
   $values = $redis->mget($keys);

4. **检查 Redis 配置**:
   确保你的 Discuz 配置文件 `config/config_global.php` 中的 Redis 配置是正确的。例如:
   $_config['cache']['type'] = 'redis';
   $_config['cache']['redis']['server'] = '127.0.0.1';
   $_config['cache']['redis']['port'] = 6379;
   $_config['cache']['redis']['pconnect'] = 1;
   $_config['cache']['redis']['timeout'] = 0;
   $_config['cache']['redis']['requirepass'] = '';
   $_config['cache']['redis']['database'] = 0;

5. **重启服务**:
   修改完配置或代码后,记得重启 PHP 和 Redis 服务:
   service php-fpm restart
   service redis restart

### 总结:
这个问题主要是由于 Redis 扩展版本不兼容导致的。你可以通过降级 Redis 扩展版本或修改 Discuz 代码来解决。如果你有其他问题,欢迎继续提问!

希望这些信息对你有帮助!如果有其他问题,欢迎随时联系。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: DX3.4 报 Call to undefined method Redis::getMultiple() 无法开启redis扩展 New