*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 ID 或 CLIENT 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(连接存在并被关闭)
- 简单字符串回复(Simple String):
- 新版格式:
- 整数回复(Integer Reply):被杀死的客户端数量,可能为 0
*版本兼容性
| Redis 版本 | 变更说明 |
|---|---|
| >= 6.0.0 | 新增 USER 过滤器,支持按 ACL 用户名关闭连接 |
| >= 5.0.0 | TYPE 过滤器支持 replica,同时保留 slave 向后兼容 |
| >= 2.8.12 | 新版多过滤器格式,支持 ADDR、ID、TYPE、SKIPME |
| < 2.8.12 | 仅支持 CLIENT KILL addr:port 单参数格式 |
*时间复杂度
O(N) — N 为已连接的客户端数量。需要遍历所有连接检查匹配条件。