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] ...]>>
- 可用版本
- Redis 开源版本 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 版本开始:将 `slave` `TYPE` 替换为 `replica`。为了向后兼容仍支持 `slave`。
- 从 Redis 6.2.0 版本开始:添加了 `LADDR` 选项。
- 从 Redis 7.4.0 版本开始:添加了 `MAXAGE` 选项。