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,其中 typenormalmasterreplicapubsub 之一。这将关闭指定类别的**所有客户端**的连接。请注意,阻塞在 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 回复

以下之一

  • 简单字符串回复: 当在 3 参数格式中调用时,如果连接已关闭,则为 OK
  • 整数回复: 当在过滤器/值格式中调用时,被杀死的客户端数量。

历史

  • 从 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 选项。
RATE THIS PAGE
Back to top ↑