客户端终止
语法
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
.杀死连接到指定本地 (bind) 地址的所有客户端。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 的单线程特性,无法 在客户端连接执行命令时终止客户端连接。从 从客户端的角度来看,连接永远无法关闭 在执行命令的过程中。但是,客户端 将注意到连接已关闭,仅当 next 命令(并导致网络错误)。
RESP2/RESP3 回复
以下选项之一:
- 简单的字符串回复:
OK
当以 3 参数格式调用时,并且连接已关闭。 - Integer reply:以 filter/value 格式调用时,被杀死的客户端数。
历史
- 从 Redis 版本 2.8.12 开始:添加了新的筛选条件格式。
- 从 Redis 版本 2.8.12 开始:
ID
选择。 - 从 Redis 版本 3.2.0 开始:添加了
master
键入 forTYPE
选择。 - 从 Redis 版本 5.0.0 开始:已替换
slave
TYPE
跟replica
.slave
仍然支持向后兼容性。 - 从 Redis 版本 6.2.0 开始:
LADDR
选择。 - 从 Redis 版本 7.4.0 开始:
MAXAGE
选择。