如何处理空闲的PUBSUB Redis连接
我最近对我的Redis集群面临的一些问题进行了一些调查,发现我有许多连接仍然存在,尽管在一段时间后会无限期闲置 经过一些调查,我发现我的集群上有以下两个设置:如何处理空闲的PUBSUB Redis连接,redis,stackexchange.redis,redis-cluster,Redis,Stackexchange.redis,Redis Cluster,我最近对我的Redis集群面临的一些问题进行了一些调查,发现我有许多连接仍然存在,尽管在一段时间后会无限期闲置 经过一些调查,我发现我的集群上有以下两个设置: timeout 300 tcp-keepalive 0 不会消失的陈旧连接是发布/订阅客户机连接(实际上是StackExchange.Redis客户机,但这并不重要),因此它们不尊重超时配置。因此,tcp keepalive似乎是唯一能够确保这些连接随着时间的推移得到清理的其他配置 因此,我将此设置应用于所有节点: redis-trib
timeout 300
tcp-keepalive 0
不会消失的陈旧连接是发布/订阅客户机连接(实际上是StackExchange.Redis客户机,但这并不重要),因此它们不尊重超时配置。因此,tcp keepalive似乎是唯一能够确保这些连接随着时间的推移得到清理的其他配置
因此,我将此设置应用于所有节点:
redis-trib.rb call 127.0.0.1:6001 config set tcp-keepalive 300
在这一点上,我回家了,第二天早上我回来了,假设陈旧的连接会得到妥善处理。不幸的是,我受到了同样的联系
我的问题是:Redis服务器端有没有办法在这些连接建立后优雅地处理它们?是否希望在连接建立和旧后应用tcp keepalive配置,而不会处理这些连接
除了重新启动Redis服务器之外,我找到的唯一解决方案是编写一点脚本并使用命令,这是可行的,但我希望基于配置的方法来处理这个问题
提前感谢您在这里提供的任何见解 是的,或者客户端应用程序应该关闭pub-sub连接,或者您可以使用“client kill-type-pubsub”命令client kill-type-pubsub杀死所有pubsub连接-我一直在寻找一种方法,只杀死那些过时且不仍然活动的连接。我的解决方案是编写一个快速脚本来解析客户端列表输出,查找大于X的空闲时间,并对其调用CLIENT KILL,而不是CLIENT KILL type pubsub,它会大量终止所有pubsub连接。如果时间大于X,您如何确定连接是否过期?Pubsub连接是持久的,因此它们不受超时参数的影响。通常,所有语言的所有活动客户端在连接终止时都会重新建立连接。因此,杀死所有的pubsub连接是一种简单的方法,可以达到预期的效果(几乎)