在使用Redis的过程中,连接管理是运维工作中绕不开的一环。有时某个客户端因为代码缺陷建立了大量连接,有时某个慢查询客户端长时间占用连接资源,甚至可能存在可疑的来源IP在扫描你的Redis实例。面对这些情况,直接重启Redis显然代价太大,而Redis提供的CLIENT KILL命令可以在不中断服务的前提下,精确地终止指定的客户端连接,是处理这类问题的首选工具。

CLIENT KILL命令的基本语法与参数
CLIENT KILL命令的作用是关闭指定的客户端连接。它的完整语法形式如下:
CLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|replica|pubsub] [USER username] [ADDR ip:port] [LADDR ip:port] [SKIPME yes/no] [MAXAGE seconds]
可以看到,这条命令支持多种过滤条件,既可以通过传统的ip:port参数指定目标,也可以通过ID参数按客户端唯一编号精确终止,还能按连接类型、用户名、本地地址等维度批量筛选。早期版本的Redis只支持直接传入ip:port这一种写法,从Redis 2.8.12开始,命令引入了过滤器的概念,支持按ID、TYPE等条件组合筛选,功能变得丰富了许多。不过需要注意的是,多个过滤条件之间是AND关系,也就是必须同时满足所有条件才会被断开。
命令执行成功时会返回被关闭的连接数量。这一点很实用,特别是在批量筛选时,你可以通过返回值直观地确认到底关闭了多少个连接。如果没有任何连接匹配过滤条件,返回值就是0,命令本身不会报错。
通过地址和ID两种方式定位客户端
定位目标客户端最常用的两种方式是按地址过滤和按ID过滤。按地址过滤的写法是使用ADDR参数加ip:port的组合,例如:
127.0.0.1:6379> CLIENT KILL ADDR 192.168.1.100:53210 (integer) 1
这种方式的缺点在于,客户端连接断开后重新连接时端口通常会变化,所以它适合一次性处理,不适合反复针对同一个客户端操作。而按ID终止则更加可靠,每个客户端连接在Redis内部都有一个唯一的数字ID,通过CLIENT LIST命令可以查看到每个连接的ID字段。例如先执行CLIENT LIST,找到可疑连接对应的ID,然后执行:
127.0.0.1:6379> CLIENT KILL ID 25 (integer) 1
ID为25的客户端连接会被立即关闭。这种方式的好处是精确无误,只要ID正确就不会误伤其他连接。在实际运维中,建议先用CLIENT LIST观察全部连接,确认目标后再用ID方式终止,这是最稳妥的操作流程。
如果要关闭来自某个IP的所有连接,CLIENT KILL并没有直接按IP段筛选的参数,但可以借助管道和shell命令组合来实现,比如先用CLIENT LIST配合grep筛出目标IP的连接,再逐条执行CLIENT KILL。另外LADDR参数可以按本地地址过滤,也就是客户端连接到的Redis服务端监听地址,在Redis实例绑定多个网卡或多端口时很有用。
按类型筛选与SKIPME参数的注意事项
TYPE参数允许按照连接类型批量关闭连接,可取值包括normal、master、replica和pubsub。比如某个应用出现连接泄漏,需要清理所有普通客户端连接,可以执行:
127.0.0.1:6379> CLIENT KILL TYPE normal (integer) 57
这条命令会关闭所有普通客户端连接,返回值57表示关闭了57个。但要特别小心,千万不要随意使用TYPE master或TYPE replica,误杀主从复制连接会导致复制中断,虽然可以重新同步,但全量复制带来的带宽和性能开销不容忽视。而TYPE pubsub只关闭处于订阅模式的客户端,对普通读写客户端没有影响。
SKIPME参数也是一个容易被忽略的细节。默认值为yes,意思是执行CLIENT KILL命令的客户端自身不会被关闭。如果显式设置为no,且当前连接本身也匹配过滤条件,那么执行命令的连接也会把自己断开,客户端会收到连接被关闭的提示。在批量清理场景下,保持默认的yes更安全,避免误将自己踢下线。
从Redis 6.0开始,命令还支持MAXAGE参数,可以关闭连接时长超过指定秒数的客户端,配合TYPE normal使用,非常适合清理那些长期空闲却未释放的老连接。此外在新版本中,没有指定任何过滤条件直接执行CLIENT KILL会报错提示,这也促使使用者明确表达操作意图,降低误操作的概率。
实际运维场景中的使用建议
在真实的生产环境中,使用CLIENT KILL之前应当先通过CLIENT INFO或CLIENT LIST确认目标连接的信息,避免凭印象操作。一个常见的排查流程是:发现连接数异常升高后,先用CLIENT LIST查看连接的来源IP、年龄、空闲时间等字段,判断是哪个应用产生的问题,然后决定是按ID精确清理还是按IP批量处理。
还需要提醒一点,CLIENT KILL只是断开连接,客户端如果配置了重连机制,通常会立即重新建立连接。所以它解决的是燃眉之急,真正的问题还是要从客户端代码层面排查,比如连接池配置是否合理、是否存在未释放连接的逻辑缺陷等。另外,执行CLIENT KILL需要相应权限,如果使用了ACL功能,操作账号需要具备client和connection相关的命令权限,否则会收到权限拒绝的错误。
RedisCLIENT KILL客户端连接修改时间:2026-09-09 13:11:03