Redis怎么查所有客户端连接状态,快速看清楚当前连了哪些人和情况
- 问答
- 2025-12-23 09:50:23
- 4
要快速看清楚Redis当前有哪些客户端连接以及它们的具体情况,最直接有效的方法就是使用Redis自带的命令行工具和其提供的监控命令,这些信息对于了解数据库的负载、排查问题、发现异常连接至关重要。
核心命令:CLIENT LIST
根据Redis官方文档,CLIENT LIST 命令是获取所有客户端连接详情的核心命令,直接在Redis服务器的命令行界面(通常使用 redis-cli 工具连接后)输入 CLIENT LIST,就会返回一个包含所有已连接客户端信息的列表。
这个命令返回的结果看起来可能有点复杂,因为它包含了非常多的字段,每个字段代表客户端连接的一个方面,为了快速看清楚,我们不需要关注所有字段,而是抓住几个关键信息,根据Redis官方文档对客户端命令的说明,这些关键字段包括:
id: 客户端的唯一连接标识符,这个ID在Redis实例的生命周期内是单调递增的,可以用来唯一识别一个连接。addr: 客户端的地址和端口,格式通常是IP:端口号,这能立刻告诉你这个连接是从哪台机器发起的,这是判断连接来源最重要的信息。fd: 客户端对应的套接字文件描述符,这个更多是Redis服务器内部使用的标识。name: 客户端的名称,这个名称可以通过CLIENT SETNAME命令来设置,如果应用程序为其连接设置了有意义的名称(order-service-backup"),那么这里就会显示出来,极大地提高了可读性,如果没设置,就是空的。age: 连接已经建立了多少秒,连接时间过长可能代表是持久连接,而过短则可能是短连接或者刚刚重连。idle: 连接已经空闲了多少秒,即多久没有执行过命令了,这个值非常大(比如几小时、几天)的连接,很可能是连接泄漏(应用程序建立了连接但忘记关闭)或者僵尸连接,可以考虑清理。flags: 客户端连接的标志位,表示连接的属性,这是一个复合值,可能包含多个字母,N: 表示普通的客户端。M: 表示当前连接是主服务器(在复制上下文中)。S: 表示当前连接是从服务器。O: 表示客户端正在执行阻塞操作(如BLPOP)。u: 表示客户端未被阻塞。A: 表示尽可能快地关闭连接。- 等等,通过这个标志可以快速判断连接的角色和状态。
db: 客户端当前正在使用的数据库编号,Redis有多个命名空间(默认16个,编号0-15),这个字段告诉你客户端正在操作哪个库。sub: 客户端通过订阅(SUBSCRIBE)命令订阅的频道数量。psub: 客户端通过模式订阅(PSUBSCRIBE)命令订阅的频道模式数量。omem: 客户端输出缓冲区占用的内存大小(以字节为单位),如果这个值异常高,可能意味着有慢客户端无法及时接收数据,导致数据在服务器端堆积,需要警惕。cmd: 客户端最后一次执行的命令,这对于了解客户端正在做什么非常有帮助。
如何让信息更清晰易读?

原始的 CLIENT LIST 输出是所有连接信息挤在一行,用空格分隔,阅读起来很不方便,我们可以利用一些技巧来美化输出。
-
使用 redis-cli 的格式化输出: 当你使用
redis-cli连接时,可以给CLIENT LIST命令加上特殊参数,让其以更清晰的表格形式显示,命令是:redis-cli client list注意,这里不是在已经连接的redis-cli内部输入,而是直接在系统shell中执行,这个命令会自动将结果格式化,让每个字段对齐,看起来一目了然,根据Redis命令行界面的文档,这是一种更友好的查看方式。
-
结合系统工具进行过滤和排序: 如果连接数非常多,你可能只关心特定信息,这时可以结合Linux/Unix的命令行工具,如
grep和sort。
- 查找来自特定IP的连接:
redis-cli client list | grep '192.168.1.100' - 找出空闲时间最长的连接(可能用于排查连接泄漏):
redis-cli client list | sort -k 6 -nr(这里假设
idle字段在第六列,可能需要根据实际输出调整列号)
- 查找来自特定IP的连接:
实时监控连接动态
如果想实时观察连接的建立和断开,类似于top命令监控系统进程一样,可以使用 redis-cli 的 --stat 模式的一个变体,或者使用 MONITOR 命令,但 MONITOR 会打印出所有命令,信息量巨大,不适合专门看连接,一个更取巧的方法是定期执行 CLIENT LIST 并清屏。
在Linux/Mac上可以这样做:

watch -n 1 "redis-cli client list"
这条命令会每秒执行一次 redis-cli client list 并刷新屏幕,让你能动态地看到连接的变化。
其他相关管理命令
除了查看,Redis官方文档还提供了一些直接管理客户端的命令:
CLIENT KILL: 根据IP和端口断开指定客户端的连接,用于踢掉异常或危险的连接。CLIENT KILL TYPE: 断开所有特定类型的连接(如normal,pubsub,replica)。CLIENT PAUSE: 在指定的毫秒数内暂停所有客户端命令,这是一个非常有影响力的操作,通常用于故障转移等维护场景,需要谨慎使用。CLIENT SETNAME/CLIENT GETNAME: 为当前连接设置或获取名称,强烈建议在应用程序中为连接设置一个有意义的名称,这样在查看CLIENT LIST时就能迅速定位。
总结一下快速看清楚的步骤:
- 打开终端,使用
redis-cli连接到你的Redis服务器。 - 输入
CLIENT LIST命令。 - 如果觉得格式乱,退出redis-cli,直接在系统shell执行
redis-cli client list获得格式化表格。 - 重点关注
addr(谁连的)、idle(空闲多久了)、name(叫什么名字)、cmd(最后干了啥)、omem(输出队列大不大)这几个字段。 - 如果需要动态监控,使用
watch命令配合CLIENT LIST。
通过以上方法,你就能快速、清晰地掌握Redis当前的客户端连接状况。
本文由钊智敏于2025-12-23发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/66841.html
