有没有方法可以移除所有的Redis客户端连接?

24

有没有一种方法可以用一个命令 断开所有Redis客户端连接

我知道可以通过IP:PORT方式删除连接。

CLIENT KILL addr:port

同时我发现自Redis 2.8.12以来可以这样做。但是,我找不到相关的说明。


1
关机 :) 但说真的,不行。你有使用案例吗? - Itamar Haber
这只是为了开发目的,我们已经接近连接限制了,我想要终止所有连接。 - felipekm
3个回答

46

CLIENT KILL 命令可以接收 TYPE 参数,其值可以是三种连接类型之一:normal(普通连接)、slave(从属连接)和 pubsub(发布订阅连接)。

以下三个命令可以关闭所有打开的连接:

CLIENT KILL TYPE normal
CLIENT KILL TYPE slave
CLIENT KILL TYPE pubsub

请注意,如果您不使用从属连接和发布订阅连接,则可以跳过后两个连接。

您还可以为“神风连接终结者”添加 SKIPME no


这仅在2.8.11及以上版本中可用:https://redis.io/commands/client-kill,在此之前只接受`CLIENT KILL addr:port`格式。 - gdvalderrama
1
没错 @guival,但如果你在2019年5月仍在使用Redis 2.8,一次性杀死所有客户端应该是你最不用担心的问题。 - Ofir Luzon
">= 5:已将“slave”类型替换为“replica”。仍支持“slave”以保证向后兼容性。" - Pang
如果在执行CLIENT KILL之后出现新的连接怎么办?有没有办法杀死并阻止更多的连接出现? - piepi
你在尝试做什么,@piepi?要做到这一点的方法是在杀死所有人之前,在ACL中进行重大更改(例如更改默认用户密码)。 - Ofir Luzon

8

所以,在开发过程中,SHUTDOWN 明显是最简单的方法。

然而,虽然 Redis 没有 CLIENT KILL * 变体,但您可以编写脚本来实现它。据我所知,您甚至可以使用 Lua 进行这项操作,但我现在检查了一下,发现 CLIENT LIST 出错了,所以我猜这可能已经改变了。不过,使用 CLI 实现这个功能还是相当容易的——以下命令似乎可以达到目的:

redis-cli CLIENT LIST | cut -d ' ' -f 2 | cut -d = -f 2 | awk -e '{ print "CLIENT KILL " $0 }' | redis-cli -x

4
您可以使用以下命令检查连接数: netstat -an | grep :6379 | grep ESTABLISHED | wc -l 然后尝试使用Redis客户端命令来断开连接: http://redis.io/commands/client-kill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接