# 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] [[ID client-id] | [TYPE <NORMAL
  | MASTER | SLAVE | REPLICA | PUBSUB>] | [USER username] |
  [ADDR ip:port] | [LADDR ip:port] | [SKIPME yes/no] ...]>>
  • 可用版本:

    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,其中typenormal,master和之一。这将关闭指定类中**所有客户端的连接。**请注意,被命令阻止的客户端被认为属于该类。replica``pubsub``MONITOR``normal
  • CLIENT KILL USER username. 关闭所有使用指定ACL用户名进行身份验证的连接,但如果用户名未映射到现有 ACL 用户,则会返回错误。
  • CLIENT KILL SKIPME yes/no. 默认情况下,此选项设置为yes,即调用该命令的客户端不会被杀死,但是将此选项设置为no也会具有杀死调用该命令的客户端的效果。

可以同时提供多个过滤器。该命令将通过逻辑 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 的单线程特性,无法在执行命令时终止客户端连接。从客户端的角度来看,连接永远不会在执行命令的过程中关闭。但是,只有在发送下一条命令时,客户端才会注意到连接已关闭(并导致网络错误)。

# 返回

当使用三个参数格式调用时:

简单字符串回复:OK如果连接存在且已关闭

使用过滤器/值格式调用时:

整数回复:被杀死的客户端数量。

# 历史

  • 从 Redis 版本 2.8.12 开始:添加了新的过滤器格式。
  • 从 Redis 版本 2.8.12 开始:ID选项。
  • 从 Redis 版本 3.2.0 开始:添加master了 type in forTYPE选项。
  • 从 Redis 版本 5.0.0 开始:替换slave TYPEreplica. slave仍然支持向后兼容。
  • 从 Redis 版本 6.2.0 开始:LADDR选项。

# 反馈

如果您在此页面上发现问题,或有改进建议,请提交请求以合并或打开存储库中的问题。

Last Updated: 4/18/2023, 8:45:33 AM