• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • client kill 命令

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

    语法

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

    有以下一些格式:

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

    可以在执行命令时同时给定多个筛选条件。该命令会使用逻辑 AND 来处理多个条件,比如:CLIENT KILL addr127.0.0.1:12345typepubsub这个命令会杀死给定 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