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

NodeJS连接AWS Redis缓存认证失败求助(redis-cli可正常连接)

解决Node.js连接AWS Redis时的NOAUTH认证错误

你的问题根源在于node-redis v4+版本的配置结构错误:你把Redis密码password放在了socket子配置里,但这个版本中认证信息属于客户端的顶层配置项,不是socket的属性。这就导致客户端连接时没有自动发送AUTH命令,触发了NOAUTH Authentication required.错误。

修改后的正确代码

const redis = require('redis');
console.log('hello');

// 正确配置:password放在客户端顶层,而非socket内
const redisClient = redis.createClient({
    socket: {
        host: "master.dev.xxx.use1.cache.amazonaws.com",
        port: 6379,
        tls: true,
        reconnectStrategy: function () {
            const retries = 35000;
            return retries;
        }
    },
    password: "XXX" // 移到这里!
});

// node-redis v4的connect方法本身就是Promise,无需手动promisify
redisClient.connect()
    .then(async () => {
        console.log("connected successfully");
        
        // 连接成功后再执行命令,避免未就绪报错
        // 设置key
        await redisClient.set('Finalli', 'value');
        console.log('Set key successfully');
        
        // 获取key
        const value = await redisClient.get('key');
        console.log('Value: ' + value);
    })
    .catch((error) => {
        console.log('连接或操作错误:', error);
    });

redisClient.on('error', (err) => {
    console.log('客户端错误:', err);
});

关键说明

  1. 配置层级修正:password必须放在createClient的顶层配置中,socket配置只负责连接的网络参数(host/port/tls等)。
  2. 无需手动promisify:node-redis v4的API已经全部Promise化,直接使用await或.then()即可,不用再借助util.promisify。
  3. 命令时机:所有Redis操作(set/get等)必须在connect()成功之后执行,否则会因为连接未建立而报错。

验证步骤

  1. 替换代码中的host和password为你的实际信息
  2. 运行node app.js,应该输出:
hello
connected successfully
Set key successfully
Value: [对应key的value或null]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:52:39