client kill 命令

Client Kill 命令关闭一个指定的连接。因为 Redis 使用单线程设计,所以当 Redis 正在执行命令的时候,不会有客户端被断开连接。如果要被断开连接的客户端正在执行命令,那么当这个命令执行之后,在发送下一个命令的时候,它就会收到一个网络错误,告知它自身的连接已被关闭。

语法

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

有以下一些格式:

  • CLIENT KILL ADDR ip:port :关闭地址为 ip:port 的客户端连接。
  • CLIENT KILL ID client-id :通过唯一 ID 字段杀死一个客户端,唯一 ID 可以通过 CLIENT LIST 命令查询。
  • CLIENT KILL TYPE type :这里的 type 可以是 normal, pubsub, replica。这将关闭所有特殊类的客户端。请注意被认为是属于正常类的客户端将会被 MONITOR 命令监视到。
  • CLIENT KILL USER username :关闭使用 ACL username 连接的客户端。如果不存在 ACL user 则返回错误。
  • CLIENT KILL SKIPME yes/no :默认情况下是 yes,调用该命令的客户端自身不被删掉,如果为 no 也会删除自身。

可以在执行命令时同时给定多个筛选条件。该命令会使用逻辑 AND 来处理多个条件,比如: CLIENT KILL addr 127.0.0.1:12345 type pubsub 这个命令会杀死给定 IP 地址的的 slave。这种包含多个筛选条件的格式目前很少使用。

返回值

返回被杀死的客户端个数,有可能为0。

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

实例

# 列出所有已连接客户端

redis> CLIENT LIST
addr=127.0.0.1:43501 fd=5 age=10 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
# 杀死当前客户端的连接

redis> CLIENT KILL 127.0.0.1:43501
OK
# 之前的连接已经被关闭,CLI 客户端又重新建立了连接
# 之前的端口是 43501 ,现在是 43504

redis> CLIENT LIST
addr=127.0.0.1:43504 fd=5 age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r c