ioredis未处理的错误事件:Error: connect ETIMEDOUT。

8

有人在使用Node.js ioredis包连接独立Redis服务器时遇到以下错误吗?

以下是错误堆栈跟踪:

2018-08-16T10:52:18.351869060Z [ioredis] Unhandled error event: Error: connect ETIMEDOUT
2018-08-16T10:52:07.449457296Z at Timer.listOnTimeout (timers.js:207:5)
2018-08-16T10:52:07.449448499Z at tryOnTimeout (timers.js:237:5)
2018-08-16T10:52:07.449439722Z at ontimeout (timers.js:365:14)
2018-08-16T10:52:07.449430834Z at Socket._onTimeout (net.js:339:8)
2018-08-16T10:52:07.449421915Z at Socket.emit (events.js:185:7)
2018-08-16T10:52:07.449413002Z at emitNone (events.js:86:13)
2018-08-16T10:52:07.449403458Z at Socket.g (events.js:291:16)

在Node.js中仅实例化Standalone Redis对象时会发生这种情况。以下是我使用的代码:

var publisher = new redis(redisPort, redisHost);

任何解决方案都将不胜感激。

4个回答

9

由于ioredis有默认的超时时间值,您可以尝试增加超时限制。

通常我们会将其设置为:

new Redis({
  connectTimeout: 10000
})

在您的情况下,由于您拥有,
var publisher = new redis(redisPort, redisHost);

您需要编辑您的代码,以便相应地传递connectTimeout参数。

希望这会有所帮助。


你能提供一个示例,说明如何在我的现有代码行中传递该参数吗? - Ankur Soni
当然,您可以请发一下相关代码,其中分别设置了redisPortredisHost变量的值吗? - David R
谢谢你,这让我不再在墙上撞头了好几个小时! - Getter Jetter
@Oliver Krull,很高兴能帮到你! :-) - David R
connectTimeout的默认值为10000毫秒。 - Rashidul Islam

5

虽然有些晚了,但对于其他人在未来可能会有所帮助。

const redis = new Redis({
   port: <your_redis_port>,
   host: <your_redis_hostname>,
   connectTimeout: 10000
});

3

我正在使用由Heroku维护的Redis客户端,但由于某种奇怪的原因,Heroku更改了Redis凭据。一直以来我都遇到同样的问题,直到我仔细检查了旧凭据和Heroku上的凭据,我才意识到它们不再相同,然后将新凭据从Heroku复制并粘贴到我的.env文件中,现在一切都按预期工作了!


1
是的,我也遇到了同样的问题。很奇怪。 - TeemuK
1
如果您在启动项目时创建了Redis客户端,则不会发生此错误,因为Heroku将自动更新凭据。此错误是在单独创建项目后添加Redis客户端附加组件导致的。希望我的解释清楚。顺便说一句,感谢您的点赞!:) - Shamxeed

0
添加keepAlive对我很有帮助。
const redisClient = new Redis({
  host: CONFIG.REDIS_HOST,
  username: CONFIG.REDIS_USER,
  password: CONFIG.REDIS_PASSWORD,
  port: CONFIG.REDIS_PORT,
  lazyConnect: true,
  keepAlive: 1000,
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接