我最近正在调查我在Redis集群上面临的一些问题,并发现尽管在一段时间后无限期闲置,我仍然有很多连接。
经过一番调查后,我发现我的群集中有这两个设置:
timeout 300
tcp-keepalive 0
不会消失的陈旧连接是PUB / SUB客户端连接(实际上是StackExchange.Redis客户端,但除此之外),因此它们不尊重超时配置。因此,tcp-keepalive似乎是唯一可以确保这些连接随着时间的推移得到清理的其他配置。
所以我将此设置应用于所有节点:
redis-trib.rb call 127.0.0.1:6001 config set tcp-keepalive 300
此时我回家了,第二天早上我回来了,假设陈旧的连接处理得当。可悲的是,我受到了所有相同的关系的欢迎。
我的问题是:Redis服务器端是否有任何方法可以在它们建立后优雅地处理这些连接?是否应该在建立连接后应用tcp-keepalive配置并且旧的不会被丢弃?
除了重新启动Redis服务器之外,我发现的唯一解决方案是执行一些脚本编写并使用CLIENT KILL命令,这是可行的,但我希望有一些基于配置的配置来处理这个问题。
提前感谢您的任何见解!