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

Node.js使用redis模块连接Redis实例出现挂起及语法错误问题

问题分析与解决

核心问题

你的代码存在两个关键问题:

  1. 执行顺序错误:client.set('key', 'value')在Redis连接建立前就同步执行了。(async() => { await client.connect(); })()是异步立即执行函数,不会阻塞后续代码,导致set操作在连接完成前触发,自然无法写入数据。
  2. await使用场景错误:直接给client.set加await时,这行代码不在async函数内部(CommonJS默认不支持顶级await),因此触发语法错误。

修复方案

把所有需要在连接建立后执行的Redis操作,放到连接成功的async函数内部,确保执行顺序正确;如果不需要长期保持连接,操作完成后主动关闭客户端可避免程序挂起。

修改后的代码:

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

client.on('error', (error) => {
    console.error('Error encountered: ', error);
});

(async() => {
    await client.connect();
    // 连接建立后执行set操作,用await确保操作完成
    await client.set('key', 'value');
    console.log('数据写入成功');
    // 操作完成后关闭客户端,避免程序挂起
    await client.disconnect();
})();

补充说明

  • 如果你的项目是ES模块(package.json中type设为module),可直接使用顶级await,写法更简洁:
import redis from 'redis';
const client = redis.createClient();

client.on('error', (error) => {
    console.error('Error encountered: ', error);
});

await client.connect();
await client.set('key', 'value');
await client.disconnect();
  • 若需要长期保持Redis连接(比如服务端持续处理请求),不要调用disconnect,但要确保所有Redis操作都在连接建立后执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:48:18