Node Redis 4.1.0客户端如何配置连接保活解决闲置断连问题
问题原因
Node Redis 从4.0版本开始做了完整的API重构,3.x版本对外暴露的stream(底层TCP socket实例)属性已经被移除,所以你之前的保活写法会抛出Cannot read properties of undefined错误,该写法仅适配3.x及更早版本。
4.1.0版本正确配置方式
这个版本已经原生支持TCP Keepalive配置,不需要手动获取底层socket调用方法,直接在初始化客户端时传入socket相关参数即可:
const redisClient = redis.createClient({ url: process.env.REDIS_HOST, socket: { // 开启TCP Keepalive,探测间隔30秒,和你之前的配置效果一致 keepAlive: 30000, // 定时发送心跳PING,避免空闲连接被中间网络设备(负载均衡、NAT网关等)主动断开 heartbeatInterval: 60000, // 自定义重连策略 reconnectStrategy: (retryCount) => { // 重连间隔随重试次数递增,最大不超过2秒 return Math.min(retryCount * 200, 2000); } } }) // 初始化连接 redisClient.connect().catch(console.error);
关于重连逻辑的说明
4.x版本默认已经内置自动重连能力,不需要你手动监听end事件实现重连:
- 只要配置了
reconnectStrategy,客户端在连接断开、超时、空闲被踢的场景下都会自动尝试重连 - 如果你不手动配置
reconnectStrategy,客户端会走默认重连规则:首次重连间隔50ms,之后逐次递增,最大间隔200ms - 只有当你调用
redisClient.quit()主动断开连接时,客户端才不会自动重连
注意事项
不要尝试通过访问内部私有属性获取底层socket实例来设置保活,内部属性不属于公开API,后续小版本迭代就可能发生变更,稳定性没有保障,直接使用官方暴露的socket配置项即可。
内容的提问来源于stack exchange,提问作者Glen
相关产品推荐
相关产品推荐

