Redis 基础教程

Redis 命令

Redis 高级教程

Redis 笔记

Redis CLIENT KILL 命令

Redis 服务器 Redis 服务器


Redis CLIENT KILL 命令关闭一个指定的连接。

命令格式

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

可用版本:>=2.4.0

时间复杂度:O(N),N 为客户端的连接数。

在 Redis 2.8.11 时,可以根据客户端地址关闭指定连接,关闭方式如下:

CLIENT KILL addr:port

ip:port 是 CLIENT LIST 命令里面列出的客户端连接之一。

但是,从 Redis 2.8.12 开始,这个命令改为如下格式:

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

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

  • CLIENT KILL ADDR ip:port

    老版本的形式。

  • CLIENT KILL ID client-id

    可以通过唯一 ID 字段杀死一个客户端,唯一 ID 可以通过 Redis 2.8.12 的 CLIENT LIST 命令查询。

  • CLIENT KILL TYPE type

    这里的 type 可以是 normal、slave、pubsub。这将关闭所有特殊类的客户端。请注意被认为是属于正常类的客户端将会被 MONITOR 命令监视到。

  • CLIENT KILL SKIPME yes/no

    默认情况下,这个选项被设置为 yes,也就是说,调用该命令的客户端不会被 no 终止,但是设置该选项的效果也会导致调用该命令的客户端被终止。

注意:从 Redis 5 开始,该命令不再使用 slave 关键字。您可以使用 TYPE replica 替换,然而老的命令形式也实现了向后兼容。

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

CLIENT KILL addr 127.0.0.1:12345 type pubsub

是可以的,并且只会杀死给定 IP 地址的 pubsub。这种包含多个筛选条件的格式目前很少使用。

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

CLIENT KILL and Redis Sentinel

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

注意

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

命令返回值

老版本的命令(即三个参数形式):

  • 连接存在并被关闭返回 OK。

过滤/值格式的形式:

  • 被杀死的客户端个数。