为什么启用keep alive时ioredis客户端超时?

vi4fp9gy  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(946)

当我的脚本空闲一段时间时,我得到了以下错误。我不明白为什么会这样。

error: [ioredis] Unhandled error event: 
error: Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27) 
error: [ioredis] Unhandled error event
error: Error: read ETIMEDOUT
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27)

我将redis客户端初始化为:

let redis = require("ioredis");
redis = Promise.promisifyAll(redis);

const redis = new redis({
   host: "my hostname",
   port: 6379,
   password: "some password"
});

我正在使用ioredis客户端。
有人知道原因吗?默认情况下,“保持活动”已启用,如此处所示https://github.com/luin/ioredis/blob/master/api.md
我希望客户端永远不会超时,如果发生超时,则重新连接。我正在使用azure的redis服务。

webghufk

webghufk1#

我们有一个完整的文档涵盖了这个主题:解决redis超时的azure缓存问题
如果使用stackexchange.redis客户端,建议使用以下模式的最佳实践:

private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
return ConnectionMultiplexer.Connect("cachename.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");
});
public static ConnectionMultiplexer Connection
   {
get
{
return lazyConnection.Value;
}
}

对于ioredis,可以设置客户端属性: [options.lazyConnect] 您还需要查看客户端可用的任何重试方法。我希望这有帮助。

相关问题