Redis 作为一款高性能的内存数据库,其连接管理功能对于监控和维护系统稳定性至关重要,本文将详细介绍 Redis 查看数据库连接的方法,涵盖命令行工具、客户端库及可视化工具的使用,帮助用户全面掌握连接状态监控技巧。

使用 CLIENT LIST 命令查看连接
CLIENT LIST 是 Redis 提供的基础命令,可实时显示所有已建立连接的详细信息,执行该命令后,会返回包含以下关键信息的列表:
- client_addr:客户端 IP 地址
 - fd:文件描述符(Unix 系统专用)
 - idle:空闲时间(秒)
 - db:当前选择的数据库索引
 - cmd:最近执行的命令
 - user:认证用户名(若启用 ACL)
 
示例输出:
id=123 addr=127.0.0.1:54321 fd=8 name=
idle=120 db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obuf=0
...
通过解析此输出,管理员可快速识别异常连接(如长时间空闲或频繁访问的客户端)。
利用 INFO CLIENTS 获取统计概览
INFO CLIENTS 命令提供更简洁的连接统计信息,适合快速检查整体连接状态:
- connected_clients:当前活跃连接数
 - blocked_clients:因阻塞操作等待的客户端数量
 - maxclients:配置的最大客户端限制
 
$ redis-cli INFO clients # Clients connected_clients:15 blocked_clients:2 maxclients:10000
当 connected_clients 接近 maxclients 时,需警惕潜在的性能瓶颈。

通过 Redis 客户端库编程获取连接
在应用程序中,可通过 Redis 官方客户端库动态查询连接信息,以下是 Python 示例:
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
clients = r.client_list()
for client in clients:
    print(f"Client ID: {client['id']}, Address: {client['addr']}")
Java、Node.js 等语言也有类似方法,核心是通过 CLIENT LIST 命令解析响应数据。
可视化工具辅助监控
RedisInsight
图形化界面展示连接详情,支持筛选和排序:
- 连接数趋势图
 - 客户端地址分布
 - 长时间空闲连接标记
 
Prometheus + Grafana
结合监控系统实现自动化告警:
- 配置 Redis Exporter 收集指标
 - 在 Grafana 中创建仪表盘显示连接变化曲线
 - 设置阈值触发报警(如连接数超过 80%)
 
高级场景:按条件过滤连接
若需精准定位特定类型的连接,可结合 SCAN 和 Lua 脚本实现复杂过滤,例如查找指定数据库的所有连接:

local cursor = 0
repeat
    local result = redis.call('CLIENT', 'LIST', 'WITHDATA')
    for _, client in ipairs(result) do
        if tonumber(client.db) == target_db then
            -- 处理匹配项
        end
    end
until cursor == 0
常见问题排查
| 问题现象 | 可能原因 | 解决方案 | 
|---|---|---|
| 连接数突然激增 | 并发请求暴增/恶意攻击 | 扩容节点/启用防火墙限流 | 
| 部分客户端持续阻塞 | 锁竞争/慢查询 | 分析慢日志/优化业务逻辑 | 
| 连接被拒绝(Error 61) | 达到 maxclients 上限 | 调整配置文件参数/升级硬件 | 
相关问答 FAQs
Q1:为什么 CLIENT LIST 显示的连接数与实际应用连接数不一致?
A:可能存在以下情况:  
- 应用程序未正确关闭连接(建议使用连接池管理);
 - 存在残留的长连接(如守护进程未退出);
 - Redis 配置了 
timeout但部分连接仍处于半开状态。 
Q2:如何自动清理长时间空闲的无效连接?
A:可通过两种方式实现:  
- 配置 Redis 参数 
timeout自动断开空闲超时的连接; - 编写脚本定期调用 
CLIENT KILL TYPE normal清理正常模式下的闲置连接(注意避免误杀重要连接)。