NestJS CacheModule连接AWS ElastiCache Redis报ECONNREFUSED错误
问题原因
报错里明确显示客户端尝试连接127.0.0.1:6379被拒绝,说明你写的ElastiCache地址配置根本没有被底层Redis客户端读取,和网络、ElastiCache服务本身无关——毕竟同环境redis-cli已经能正常连通。
核心问题是cache-manager-redis-store的版本和你写的配置结构不匹配:v2及更早版本的cache-manager-redis-store依赖redis@3.x客户端,不支持嵌套的socket配置项,你写在socket里的host、port、tls参数全被忽略,客户端自动回退到默认的本地6379端口连接,才会报这个错。
修复方法
二选一即可:
方案1:适配旧版依赖,调整配置结构
如果不想更换依赖,直接把socket层级里的参数提出来,放到配置最外层即可:
CacheModule.register<RedisClientOptions>({ isGlobal: true, store: redisStore, host: 'master.my-server.use1.cache.amazonaws.com', port: 6379, tls: true, password: 'my-password', })
方案2:升级依赖,保留原有配置结构
如果要使用新版redis客户端的配置格式,先卸载旧的不兼容包,安装新版适配的依赖:
npm uninstall cache-manager-redis-store npm install @cache-manager/redis cache-manager@5
安装完成后导入新包对应的redisStore,你原来写的嵌套socket配置不需要修改,就能正常读取连接参数。
注意事项
- 配置修改后记得重启PM2进程,避免旧代码缓存导致配置不生效
- 你已经验证过redis-cli可以连通,不需要额外调整安全组、VPC网络、ElastiCache白名单配置
- 如果ElastiCache启用了传输加密,保持
tls: true即可,不需要额外传入证书内容
内容的提问来源于stack exchange,提问作者Eudes Tenório
相关产品推荐
相关产品推荐

