*Redis CLIENT LIST 命令
CLIENT LIST 返回所有连接到 Redis 服务器的客户端的详细信息和统计。
*语法
CLIENT LIST [TYPE <normal | master | replica | pubsub>] [ID <id> [id ...]] [ADDR <ip:port>] [LADDR <ip:port>] [SKIPME <yes | no>]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| TYPE | String | 否 | 过滤客户端类型:normal(普通)、master(主节点)、replica(从节点)、pubsub(订阅) |
| ID | Integer | 否 | 过滤指定 ID 的客户端,支持多个 |
| ADDR | String | 否 | 过滤指定远程地址的客户端 |
| LADDR | String | 否 | 过滤指定本地地址的客户端 |
| SKIPME | String | 否 | 是否排除当前客户端:yes(排除)或 no(包含) |
*返回值
- String:多行文本,每行一个客户端的信息,字段格式为
key=value
*时间复杂度
O(N),N 为客户端连接数量。
*示例
*列出所有客户端
> CLIENT LIST
id=3 addr=127.0.0.1:54321 fd=8 name= age=120 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=17108 events=r cmd=client|list user=default redir=-1 resp=2
id=4 addr=127.0.0.1:54322 fd=9 name=myapp age=60 idle=30 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=4 obl=0 oll=0 omem=0 tot-mem=17080 events=r cmd=get user=default redir=-1 resp=2
*按类型过滤
> CLIENT LIST TYPE normal
id=3 addr=127.0.0.1:54321 fd=8 name= age=120 idle=0 flags=N db=0 ...
*按 ID 过滤
> CLIENT LIST ID 3 4
id=3 addr=127.0.0.1:54321 ...
id=4 addr=127.0.0.1:54322 ...
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 参数格式错误 | 检查可选参数是否正确 |
| ERR syntax error | 未知的过滤选项 | 使用 TYPE / ID / ADDR / LADDR / SKIPME |
*最佳实践
- 定期监控连接数,防止连接泄漏导致资源耗尽
- 关注
idle字段,清理长期空闲的连接 - 使用 CLIENT SETNAME 命名连接,便于在 LIST 中识别来源
- 监控
tot-mem字段,发现内存占用异常的连接 - 使用
SKIPME yes排除当前连接,避免误杀管理连接
*FAQ
Q1: 如何统计当前连接数?
A: 计算 CLIENT LIST 输出的行数,或使用 INFO clients 查看 connected_clients。
Q2: 如何找到最空闲的连接?
A: 解析 CLIENT LIST 输出,按 idle 字段降序排序。
Q3: flags 字段中的字母代表什么? A: N=普通, M=主节点, S=从节点, P=Pub/Sub, O=监控, x=关闭中, b=阻塞等待, d=正在读取多字节, u=未认证, c=RESP2->RESP3 转换中, A=ACL 跟踪, r=只读等。