Redis CLIENT KILL 命令关闭一个指定的连接。
命令格式
CLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]
可用版本:>=2.4.0
时间复杂度:O(N),N 为客户端的连接数。
在 Redis 2.8.11 时,可以根据客户端地址关闭指定连接,关闭方式如下:
CLIENT KILL addr:port
ip:port 是 CLIENT LIST 命令里面列出的客户端连接之一。
但是,从 Redis 2.8.12 开始,这个命令改为如下格式:
CLIENT KILL <filter> <value> ... ... <filter> <value>
新的格式可以根据不同属性杀死客户端而不是只按地址杀死。它们有以下一些格式:
-
CLIENT KILL ADDR ip:port
老版本的形式。
-
CLIENT KILL ID client-id
可以通过唯一 ID 字段杀死一个客户端,唯一 ID 可以通过 Redis 2.8.12 的 CLIENT LIST 命令查询。
-
CLIENT KILL TYPE type
这里的 type 可以是 normal、slave、pubsub。这将关闭所有特殊类的客户端。请注意被认为是属于正常类的客户端将会被 MONITOR 命令监视到。
-
CLIENT KILL SKIPME yes/no
默认情况下,这个选项被设置为 yes,也就是说,调用该命令的客户端不会被 no 终止,但是设置该选项的效果也会导致调用该命令的客户端被终止。
注意:从 Redis 5 开始,该命令不再使用 slave 关键字。您可以使用 TYPE replica 替换,然而老的命令形式也实现了向后兼容。
可以在执行命令时同时给定多个筛选条件。该命令会使用逻辑 AND 来处理多个筛选条件,比如:
CLIENT KILL addr 127.0.0.1:12345 type pubsub
是可以的,并且只会杀死给定 IP 地址的 pubsub。这种包含多个筛选条件的格式目前很少使用。
当使用新的格式时,该命令不再返回 OK 或者错误,而是返回被杀死的客户端个数,有可能为0。
CLIENT KILL and Redis Sentinel
当前版本的 Redis Sentinel(Redis 2.8.12 及以上) 可以在实例被重新配置的时候,使用 CLIENT KILL 杀死客户端。这样可以强制客户端和一个 Sentinel 重新连接并更新自己的配置。
注意
因为 Redis 的单线程属性,不可能在客户端执行命令时杀掉它。从客户端的角度看,永远无法杀死一个正在执行命令的连接。但是当客户端发送下一条命令时会意识到连接已被关闭,原因为网络错误。
命令返回值
老版本的命令(即三个参数形式):
- 连接存在并被关闭返回 OK。
过滤/值格式的形式:
- 被杀死的客户端个数。