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

Node.js使用redis模块无法连接Redis,调用方法报ClientClosedError错误

核心原因

你使用的是v4及以上版本的Node.js Redis官方客户端,该版本存在向下不兼容改动,连接逻辑和旧版不同:

  • v3版本调用redis.createClient()后会自动发起连接,绑定的事件监听器可以正常触发
  • v4版本默认不会自动发起连接,必须手动调用client.connect()方法,未调用时客户端始终处于关闭状态,因此不会触发任何连接相关事件,调用set等操作方法时就会抛出ClientClosedError: The client is closed错误。
修复方案

方案1:适配v4版本逻辑(推荐)

在创建客户端后新增手动调用连接的代码,修复后代码如下:

const redis = require('redis');
const client = redis.createClient(6379);

client.on('connect', () => {
    console.log('connected');
});
client.on('end', () => {
    console.log('disconnected');
});
client.on('reconnecting', () => {
    console.log('reconnecting');
});
client.on('error', (err) => {
    console.log('error', { err });
});

// 新增手动连接调用
client.connect();

setTimeout(() => {console.log("goodbye") }, 20*1000 );

额外注意:v4版本所有Redis操作方法默认返回Promise,需要用async/await或者.then()方式调用,比如await client.set('testKey', 'testValue'),不再支持v3版本的回调传参写法。

方案2:降级到v3版本

如果不想修改现有代码逻辑,可以直接安装v3版本的Redis客户端:

npm install redis@3

安装后原有代码不需要任何改动即可正常运行。

内容的提问来源于stack exchange,提问作者Valchar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:06:08