如何用Node.js(ioredis)连接RedisLab及EAI_FAIL错误排查
使用ioredis连接RedisLab及EAI_FAIL错误排查
一、正确连接RedisLab的步骤
- 安装ioredis依赖
npm install ioredis # 或用yarn yarn add ioredis - 从RedisLab控制台获取实例信息
需拿到三个核心信息:- 主机地址(如
redis-12345.redislabs.com,不带端口和协议前缀) - 端口号(如
12345) - 实例密码(创建实例时设置的密码)
- 主机地址(如
- 编写连接代码
两种常用写法:- 拆分参数写法:
const Redis = require('ioredis'); const redisClient = new Redis({ host: 'redis-12345.redislabs.com', // 纯域名,不要加端口或redis:// port: 12345, password: 'your-redis-instance-password', db: 0 // 可选,默认连接第0个数据库 }); // 测试连接 redisClient.ping() .then(() => console.log('RedisLab连接成功')) .catch(err => console.error('连接失败:', err)); - URL字符串写法:
const Redis = require('ioredis'); // 格式:redis://:密码@主机地址:端口/数据库编号 const redisClient = new Redis('redis://:your-redis-instance-password@redis-12345.redislabs.com:12345/0'); redisClient.ping().then(console.log).catch(console.error);
- 拆分参数写法:
二、EAI_FAIL错误的排查与解决
你遇到的errno: -3004,code: 'EAI_FAIL'是DNS解析失败,从错误信息里的hostname: 'redis:123.redislabs.com:18094'能直接定位问题:
- 错误根源:你把协议前缀、主机地址、端口号混在了同一个
hostname参数里,DNS服务器无法识别这个混乱的字符串,导致解析失败。
具体解决步骤:
- 修正hostname参数:只保留纯域名(如
redis-123.redislabs.com),端口单独放在port字段 - 验证域名解析:在终端执行
nslookup redis-123.redislabs.com,能返回IP说明DNS正常;返回错误则检查域名是否复制正确 - 检查网络连通性:用
telnet redis-123.redislabs.com 18094测试端口是否可访问,不通的话可能是防火墙或RedisLab实例的IP白名单限制 - 确认RedisLab实例状态:登录控制台查看实例是否正常运行,白名单是否包含你的当前IP
内容的提问来源于stack exchange,提问作者Abdul Haseeb TK
相关产品推荐
相关产品推荐

