CLIENT KILL
语法
CLIENT KILL <ip:port | <[ID client-id] | [TYPE <NORMAL | MASTER | SLAVE | REPLICA | PUBSUB>] | [USER username] | [ADDR ip:port] | [LADDR ip:port] | [SKIPME <YES | NO>] | [MAXAGE maxage] [[ID client-id] | [TYPE <NORMAL | MASTER | SLAVE | REPLICA | PUBSUB>] | [USER username] | [ADDR ip:port] | [LADDR ip:port] | [SKIPME <YES | NO>] | [MAXAGE maxage] ...]>>
- 可用时间
- 2.4.0
- 时间复杂度
- O(N),其中N是客户端连接的数量
- ACL类别
-
@admin
,@slow
,@dangerous
,@connection
,
CLIENT KILL
命令关闭给定的客户端连接。该命令支持两种格式,旧格式
CLIENT KILL addr:port
ip:port
应该与 CLIENT LIST
命令(addr
字段)返回的行的内容匹配。
新格式
CLIENT KILL <filter> <value> ... ... <filter> <value>
使用新格式,可以根据不同的属性杀死客户端,而不仅仅是根据地址。以下过滤器可用
CLIENT KILL ADDR ip:port
。这与旧的三参数行为完全相同。CLIENT KILL LADDR ip:port
。杀死连接到指定本地(绑定)地址的所有客户端。CLIENT KILL ID client-id
。允许根据其唯一的ID
字段杀死客户端。客户端ID
通过CLIENT LIST
命令获取。CLIENT KILL TYPE type
,其中 type 是normal
、master
、replica
和pubsub
之一。这将关闭指定类别的**所有客户端**的连接。请注意,阻塞在MONITOR
命令中的客户端被认为属于normal
类别。CLIENT KILL USER username
。关闭使用指定 ACL 用户名进行身份验证的所有连接,但如果用户名不映射到现有的 ACL 用户,则会返回错误。CLIENT KILL SKIPME yes/no
。默认情况下,此选项设置为yes
,即调用该命令的客户端不会被杀死,但是将此选项设置为no
将会同时杀死调用该命令的客户端。CLIENT KILL MAXAGE maxage
。关闭所有比指定年龄(以秒为单位)更旧的连接。在 Redis v7.4 中添加。
可以同时提供多个过滤器。该命令将通过逻辑 AND 处理多个过滤器。例如
CLIENT KILL addr 127.0.0.1:12345 type pubsub
是有效的,只会杀死具有指定地址的 pubsub 客户端。此包含多个过滤器的格式目前很少有用。
当使用新格式时,该命令不再返回 OK
或错误,而是返回被杀死的客户端数量,该数量可能为零。
CLIENT KILL 和 Redis Sentinel
最新版本的 Redis Sentinel(Redis 2.8.12 或更高版本)使用 CLIENT KILL 来杀死客户端,当实例被重新配置时,强制客户端再次与一个 Sentinel 执行握手并更新其配置。
注意
由于 Redis 的单线程特性,无法在客户端执行命令时杀死客户端连接。从客户端的角度来看,连接永远不会在命令执行过程中关闭。但是,客户端只有在发送下一个命令(并导致网络错误)时才会注意到连接已关闭。
RESP2/RESP3 回复
以下之一
历史
- 从 Redis 版本 2.8.12 开始:添加了新的过滤器格式。
- 从 Redis 版本 2.8.12 开始:
ID
选项。 - 从 Redis 版本 3.2.0 开始:为
TYPE
选项添加了master
类型。 - 从 Redis 版本 5.0.0 开始:用
replica
替换了slave
TYPE
。为了向后兼容,slave
仍然受支持。 - 从 Redis 版本 6.2.0 开始:
LADDR
选项。