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
。
新格式:整数: 被杀死的客户端个数。