CLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [USER username] [ADDR ip:port] [SKIPME yes/no]

Redis CLIENT KILL 命令用于关闭地址为 ip:port 的客户端连接。

CLIENT KILL addr:port

ip:port 应该和 CLIENT LIST 命令返回的结果中 addr 列其中一行匹配。

因为 Redis 使用单线程设计,所以当 Redis 正在执行命令的时候,不会有客户端被断开连接。

如果要被断开连接的客户端正在执行命令,那么当这个命令执行之后,在发送下一个命令的时候,它就会收到一个网络错误,告知它自身的连接已被关闭。

从Redis 2.8.12开始,CLIENT KILL 命令改为如下格式:

CLIENT KILL <filter> <value> ... ... <filter> <value>

新的格式可以根据不同属性杀死客户端而不是只按地址杀死。他们有以下选项:

  • CLIENT KILL ADDR ip:port 和旧版的三个参数时的行为完全一样。
  • CLIENT KILL ID client-id 可以通过唯一ID字段杀死一个客户端,唯一ID可以通过Redis2.8.12的CLIENT LIST命令查询。
  • CLIENT KILL TYPE type 这里的 type 可以是 normal, slave, pubsub。 这将关闭给定烈性的所有客户端。请注意MONITOR命令阻塞的客户端是 normal 类型。
  • CLIENT KILL USER username 关闭使用 ACL username 连接的客户端。如果不存在 ACL user 则返回错误。
  • CLIENT KILL SKIPME yes/no 默认情况下是 yes, 调用该命令的客户端自身不被删掉,如果为 no 也会删除自身。

Note: 从 Redis 5 起项目不再使用 slave 词汇。可以使用 TYPE replica 替代,仍然支持向后兼容。

可以在执行命令时同时给定多个筛选条件。该命令会使用逻辑AND来处理多个条件,比如:

CLIENT KILL addr 127.0.0.1:12345 type pubsub

这个命令会杀死给定IP地址的的slave。这种包含多个筛选条件的格式目前很少使用。

当使用新的格式时,该命令不再返回OK或者错误,而是返回被杀死的客户端个数,有可能为0。

*CLIENT KILL and Redis Sentinel

当前版本的Redis Sentinel (Redis 2.8.12 or greater) 可以在实例被重新配置的时候使用CLIENT KILL 杀死客户端。这样可以强制客户端和Sentinel重新连接并更新自己的配置。

*Notes

因为Redis的单线程属性,不可能在客户端执行命令时杀掉它。从客户端的角度看,永远无法杀死一个正在执行命令的连接。 但是当客户端发送下一条命令时会意识到连接已被关闭,原因为返回网络错误。

*返回值

三参数格式执行命令:字符串: 连接存在并被关闭返回 OK

新格式:整数: 被杀死的客户端个数。