客户端终止
Syntax
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] ...]>>
- Available since:
- 2.4.0
- Time complexity:
- O(N) where N is the number of client connections
- ACL categories:
-
@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 回复
以下之一:
- Simple string reply: 当以3个参数格式调用并且连接已关闭时,返回
OK
。 - Integer reply: 当以filter/value格式调用时,被杀死的客户端数量。
历史
- 从 Redis 2.8.12 版本开始:新增了过滤器格式。
- 从 Redis 版本 2.8.12 开始:
ID
选项。 - 从 Redis 版本 3.2.0 开始:在
TYPE
选项中添加了master
类型。 - 从Redis版本5.0.0开始:将
slave
TYPE
替换为replica
。为了向后兼容,仍然支持slave
。 - 从 Redis 版本 6.2.0 开始:
LADDR
选项。 - 从 Redis 7.4.0 版本开始:
MAXAGE
选项。