ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Redis 连接断开后的自动重连操作

2026/9/30 12:04:48 拓冰建站 浏览量
Redis 连接断开后的自动重连操作 1 日志解析这不是 bug而是Lettuce在进行 Redis 连接断开后的自动重连操作。[2025-12-1817:45:46:088]... INFO... Reconnecting, last destination was140.x.x.x/140.x.x.x:56750[2025-12-1817:45:46:095]... INFO... Reconnected to140.x.x.x:56750Lettuce检测到与 Redis 的连接断开了自动尝试重新连接Reconnecting成功重新建立连接Reconnected整个过程是 Lettuce 的正常容错机制Lettuce 的ConnectionWatchdog就每 5 分钟重连一次这是INFO 级别、心跳空闲超时timeout: 300后的正常重连不是 ERROR。真正隐患是它每 5 分钟准时出现说明连接一直处于连上→空闲断开→重连的循环。我的场景是因为服务器应用连的 db2那里空空如也。应用启动时把 Redis 写入链路关了v2x.process.enabled: false又对着空库操作Lettuce 的ConnectionWatchdog就每 5 分钟重连一次刷那串 INFO 日志。2 为啥会断开连接虽重连成功但也应排查为什么连接会断开。常见原因2.1 Redis 服务端主动断开Redis 配置了timeout空闲连接超时默认是 0不超时但如果设为比如300秒空闲连接会被关闭。检查 Redis 配置redis-cli CONFIG GETtimeout2.2 网络问题中间有防火墙、NAT、负载均衡器如云厂商 SLB设置了TCP 空闲超时例如阿里云 SLB 默认 900 秒。如果客户端和 Redis 之间长时间无通信中间设备会断开 TCP 连接。2.3 Redis 重启或故障转移Redis 实例重启、主从切换、哨兵切换等会导致连接中断。2.4 客户端资源回收应用长时间未使用 Redis 连接连接池可能被清理但 Lettuce 默认是长连接不太可能。3 如何避免频繁重连在 Spring Boot 中可以通过启用 TCP Keepalive 和 Lettuce 心跳来保持连接活跃。方法 1配置application.ymlspring:redis:host:140.x.x.xport:xxxlettuce:pool:max-active:8max-idle:8min-idle:0# 启用连接健康检查可选shutdown-timeout:100ms# 启用 TCP keep-aliveclient-name:my-app⚠️ 注意spring.redis.lettuce不直接支持keep-alive需要通过自定义LettuceClientConfiguration。方法 2推荐自定义 Lettuce 连接配置ConfigurationpublicclassRedisConfig{BeanpublicLettuceConnectionFactoryredisConnectionFactory(){// 启用 TCP keep-alive 和连接健康检查SocketOptionssocketOptionsSocketOptions.builder().keepAlive(true)// 启用 TCP keep-alive.tcpNoDelay(true).build();ClientOptionsclientOptionsClientOptions.builder().socketOptions(socketOptions).build();LettuceClientConfigurationclientConfigLettuceClientConfiguration.builder().clientOptions(clientOptions).build();returnnewLettuceConnectionFactory(redisStandaloneConfiguration(),clientConfig);}// 你的 Redis 配置host/portprivateRedisStandaloneConfigurationredisStandaloneConfiguration(){RedisStandaloneConfigurationconfignewRedisStandaloneConfiguration();config.setHostName(140.x.x.x);config.setPort(56750);returnconfig;}}4 其他建议检查 Redis 服务器负载是否因 OOM、CPU 打满导致连接断开查看 Redis 日志是否有Client closed connection或Timeout相关记录监控连接数redis-cli info clients查看connected_clients是否突增突降。云厂商注意云 Redis 实例通常有连接空闲超时策略建议设置keep-alive。5 总结问题结论这是 bug 吗不是是 Lettuce 正常重连机制需要处理吗建议排查断连原因 启用keep-alive避免频繁重连影响业务吗如果重连很快毫秒级通常无感知但频繁重连可能影响性能生产务必配置TCP keep-alive和合理的连接池参数避免因中间网络设备超时导致连接断开。