*Redis CLIENT KILL 命令 关闭指定的客户端连接

*语法说明

# 旧版格式(Redis < 2.8.12)
CLIENT KILL addr:port

# 新版格式(Redis >= 2.8.12)
CLIENT KILL <filter> <value> [ ... <filter> <value> ]

# 支持的过滤器
CLIENT KILL ADDR ip:port
CLIENT KILL ID client-id
CLIENT KILL TYPE normal | master | replica | pubsub
CLIENT KILL USER username
CLIENT KILL SKIPME yes | no

*中文详细说明

CLIENT KILL 命令用于关闭指定的客户端连接。

旧版格式(Redis < 2.8.12)

只能通过 addr:port 精确匹配并杀死连接。ip:port 必须与 CLIENT LIST 返回的 addr 字段完全一致。

新版格式(Redis >= 2.8.12)

支持多种过滤条件组合使用,多个条件之间是 逻辑 AND 关系。

过滤器 说明
ADDR ip:port 匹配指定地址和端口的客户端
ID client-id 匹配指定客户端 ID 的连接(ID 可通过 CLIENT IDCLIENT LIST 获取)
TYPE type 匹配指定类型的客户端:normal(普通客户端)、master(主节点)、replica(从节点,Redis 5+ 推荐使用 replica 替代 slave)、pubsub(Pub/Sub 订阅者)
USER username 匹配使用指定 ACL 用户名连接的客户端
SKIPME yes/no 默认 yes(不关闭自己),设为 no 也会关闭当前连接

重要说明

  • Redis 采用单线程设计,正在执行命令的客户端不会被立即断开
  • 目标客户端会在当前命令执行完毕、发送下一条命令时收到网络错误,意识到连接已被关闭
  • 旧版格式返回 OK 或错误;新版格式返回被杀死的客户端数量(可能为 0)
  • MONITOR 命令阻塞的客户端归类为 normal 类型

*可运行示例

*示例 1:通过地址杀死指定连接(旧版格式)

# 先查看客户端列表
redis-cli CLIENT LIST

# 杀死指定地址的客户端
redis-cli CLIENT KILL 192.168.1.100:54321

预期输出:

OK

*示例 2:通过 ID 杀死指定客户端

# 获取目标客户端的 ID
TARGET_ID=$(redis-cli CLIENT LIST | grep "name=worker" | awk '{print $1}' | cut -d= -f2)

# 杀死该客户端
redis-cli CLIENT KILL ID "$TARGET_ID"

预期输出:

(integer) 1

*示例 3:按类型批量关闭 Pub/Sub 连接

# 关闭所有 Pub/Sub 类型的客户端
redis-cli CLIENT KILL TYPE pubsub

预期输出(假设有 3 个 pubsub 客户端):

(integer) 3

*示例 4:组合条件过滤并关闭连接

# 关闭来自 192.168.1.0/24 网段的普通客户端,但不关闭自己
redis-cli CLIENT KILL ADDR 192.168.1.100:54321 TYPE normal SKIPME yes

# 关闭使用指定 ACL 用户的连接
redis-cli CLIENT KILL USER temp_user

预期输出:

(integer) 1
(integer) 2

*示例 5:强制关闭包括自己在内的所有连接

# 危险操作:关闭所有 normal 类型的连接,包括当前连接
redis-cli CLIENT KILL TYPE normal SKIPME no

预期输出(当前连接也会被关闭,可能无输出或返回数量):

(integer) 5

*返回值

  • 旧版格式
    • 简单字符串回复(Simple String)OK(连接存在并被关闭)
  • 新版格式
    • 整数回复(Integer Reply):被杀死的客户端数量,可能为 0

*版本兼容性

Redis 版本 变更说明
>= 6.0.0 新增 USER 过滤器,支持按 ACL 用户名关闭连接
>= 5.0.0 TYPE 过滤器支持 replica,同时保留 slave 向后兼容
>= 2.8.12 新版多过滤器格式,支持 ADDRIDTYPESKIPME
< 2.8.12 仅支持 CLIENT KILL addr:port 单参数格式

*时间复杂度

O(N) — N 为已连接的客户端数量。需要遍历所有连接检查匹配条件。