Redis空闲连接被断开排查
Redis空闲连接被断开,最常见的原因是服务端 timeout 配置或中间网络设备(防火墙/NAT)静默切断空闲连接,客户端连接池毫不知情,下次拿到“僵尸连接”才报错。
🎯 先定位是哪一侧断开
查服务端 timeout:执行 redis-cli CONFIG GET timeout。默认300秒,表示空闲N秒后服务端主动关连接。
查服务端 tcp-keepalive:执行 redis-cli CONFIG GET tcp-keepalive。默认300秒,控制空闲多久后发TCP探测包。
看客户端报错类型:Connection reset 或 connect timed out 多为连接被服务端或网络设备断开;Could not get a resource from the pool 可能是连接池问题。
🛠️ 服务端配置建议
调整 timeout:业务存在长空闲间隔时,设为 0(完全由连接池管理)或调大,如600秒。
开启 tcp-keepalive:建议设为300,主从节点都配,需改配置文件并重启生效,CONFIG SET 不支持热重载。
持久化配置:用 CONFIG SET 只改内存,重启丢失,需执行 CONFIG REWRITE 写回配置文件。
🔧 客户端连接池配置
开启空闲检测:Jedis 默认 testWhileIdle 和 testOnBorrow 都是 false,建议开启并设置空闲检测周期。
Lettuce 专用:pingBeforeActivateConnection(true) 每次取连接前自动PING;注意配密码时需在 RedisURI 中带上认证信息。
Redisson 专用:设置 setHeartbeatInterval(15000),每15秒心跳保活。
- 点赞
- 收藏
- 关注作者
评论(0)