CONFIG SET timeout 300 CONFIG SET tcp-keepalive 60 # 客户端连接池 # testWhileIdle=true, minEvictableIdleTimeMillis=60000
服务空闲一段时间后第一批请求报连接被重置,重连后又正常,日志里没有其他线索。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:连接长时间空闲被中间设备或服务端回收,客户端仍认为连接可用,继续复用就收到重置。
「Redis 连接被重置」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
处理上按这个顺序:设置合理的空闲超时与心跳;客户端开启健康检查;连接池配置最小空闲与校验。
确认没问题再收工,空闲后首批请求不再报错,连接池中失效连接能被自动剔除。