CLIENT KILL 断开问题连接
CLIENT KILL 用于断开指定客户端连接:早期写法按地址匹配,较新版本支持按 ID、连接类型、用户名等过滤条件批量匹配,返回值是实际被断开的连接数。运维上它用来处理异常客户端、慢消费者和连接泄漏:先用 CLIENT LIST 看清对象,再用过滤条件精确断开。断开连接只是止血,导致异常的原因仍要回到客户端侧解决,否则同一现象会反复出现。
基本信息
| 按地址 | CLIENT KILL ADDR ip:port |
|---|---|
| 按 ID | CLIENT KILL ID 12345 |
| 按类型 | CLIENT KILL TYPE normal|pubsub|replica|master |
| 其他过滤 | LADDR、USER、SKIPME,较新版本还有 MAXAGE |
| 返回值 | 受影响的连接数 |
| 查看命令 | CLIENT LIST [TYPE ...] |
| 权限 | 需要连接管理类权限 |
典型使用场景
- 某个客户端写循环打满实例,临时断开保护整体可用性
- 订阅连接缓冲堆积,按类型批量断开慢消费者
- 连接泄漏排查时清理长期空闲的连接
- 客户端版本异常频繁重连,按地址定位并断开
- 演练中验证断连后业务的重连与降级逻辑
- 运维脚本按条件清理测试环境遗留连接
- 副本连接异常时按类型排查,确认是否影响复制
- 发布前后清理旧版本客户端的长连接,推动版本收敛
定位与断开
定位与断开
redis-cli CLIENT LIST | head -5 # 先看连接全貌
redis-cli CLIENT LIST TYPE pubsub # 只看订阅连接
redis-cli CLIENT KILL ID 12345 # 按连接 ID 断开
redis-cli CLIENT KILL ADDR 10.0.0.5:54321 # 按地址断开
redis-cli CLIENT KILL TYPE pubsub SKIPME yes # 批量断开订阅连接
redis-cli INFO stats | grep -E 'evicted_clients' # 对照是否有服务端驱逐过滤条件对照
| 过滤项 | 取值 | 用途 |
|---|---|---|
| ADDR | 客户端地址 | 精确断开单条连接 |
| ID | 连接编号 | 脚本化定位 |
| TYPE | normal、pubsub、replica、master | 按角色批量清理 |
| SKIPME | yes 或 no | 避免断开当前连接 |
批量断开前先跑一遍对应的 CLIENT LIST 预览对象,把过滤条件写错会直接伤到正常业务连接。
断开慢消费者只解决当下的内存与带宽压力,消费能力不足与重连退避缺失的问题仍要跟进。
按类型批量断开时记得带 SKIPME yes,避免把自己这条运维连接一起断掉,导致脚本中途失败。