1.🔍 Redis 核心监控指标与典型问题监控
| 监控类别 | 关键指标 | 说明/监控要点 | 监控命令/常用工具 |
|---|---|---|---|
| 性能指标 | 响应延迟 (latency) |
Redis 响应请求的时间,过高会影响用户体验。可使用 redis-cli --latency 检测。 |
redis-cli --latency |
每秒操作数 (instantaneous_ops_per_sec) |
Redis 实例每秒处理的命令数,反映当前负载。 | INFO stats |
|
缓存命中率 (keyspace_hits / (keyspace_hits+keyspace_misses)) |
反映缓存有效性,过低可能意味着缓存无效数据过多或热点数据设置不合理。 | INFO stats 计算所得 |
|
| 内存指标 | 已使用内存 (used_memory) |
Redis 分配器分配的内存总量,接近 maxmemory 需警惕,单位字节。 |
INFO memory |
内存碎片率 (mem_fragmentation_ratio) |
used_memory_rss / used_memory,大于 1.5 说明碎片较多,小于 1.0 表示 Redis 正在使用交换分区,可能需重启或调整。 |
INFO memory |
|
已淘汰键数量 (evicted_keys) |
因达到 maxmemory 策略限制而被移除的 key 数量增多是内存不足的信号。 |
INFO stats |
|
被阻塞客户端数 (blocked_clients) |
因执行阻塞命令(如 BLPOP)而被阻塞的客户端数量,持续阻塞可能影响效率。 |
INFO clients |
|
| 基本活动指标 | 客户端连接数 (connected_clients) |
已连接的客户端数量,异常增多可能意味着连接泄漏或异常访问。 | INFO clients |
主从延迟 (master_last_io_seconds_ago) |
主从服务器最后一次交互至今的秒数,值过大可能表示主从复制延迟或连接问题。 | INFO replication |
|
Key 总数 (keyspace) |
当前数据库中的 key 总数,非绝对性能指标,但需结合内存监控。 | INFO keyspace |
|
| 持久化指标 | 最后一次 RDB 保存时间 (rdb_last_save_time) |
最后一次成功创建 RDB 快照的时间戳,检查备份是否如期进行。 | INFO persistence |
自上次保存后的更改数 (rdb_changes_since_last_save) |
自最后一次 RDB 保存后,数据库的更改操作次数,值过大意味着大量数据未持久化,若此时宕机可能数据丢失。 | INFO persistence |
|
| 错误指标 | 被拒绝连接数 (rejected_connections) |
因达到 maxclients 限制而拒绝的客户端连接数,激增意味着连接数不足或客户端重连逻辑有问题。 |
INFO stats |
Key 查找失败次数 (keyspace_misses) |
查找不存在的 key 的次数,需结合 keyspace_hits 计算命中率,异常高需警惕缓存穿透。 |
INFO stats |
|
主从连接断开时长 (master_link_down_since_seconds) |
主从连接断开的持续时间(秒),大于 0 表示主从连接存在问题。 | INFO replication |
2.🗝️ 大 Key 与热 Key 监控
大 Key 和热 Key 是 Redis 运维中需要特别关注的问题,它们可能引发性能瓶颈、内存不足甚至服务雪崩。
-
大 Key (Big Key):通常指 value 的存储大小过大(例如字符串类型 value 超过 10KB,哈希、列表、集合等元素过多超过 1000 个)的 Key。危害包括:
-
网络阻塞:读取单个大 Key 会占用大量带宽,影响其他请求。
-
命令执行缓慢:某些命令(如
HGETALL,LRANGE,SMEMBERS)对大 Key 操作耗时久,会阻塞 Redis 单线程。 -
内存分配与释放问题:删除大 Key 可能导致长时间阻塞,甚至引发内存碎片。
-
-
热 Key (Hot Key):指在短时间内被高频访问的 Key,其 QPS 远高于其他 Key。危害包括:
-
服务器压力集中:所有请求落到同一 Redis 实例(或分片),可能导致 CPU 和网络瓶颈。
-
数据倾斜:在集群模式下,热 Key 可能导致某个节点负载过高。
-
缓存击穿风险:若热 Key 过期,大量请求会直接冲击后端数据库。
-
2.1 监控方法与工具
-
Redis 内置命令与日志:
-
redis-cli --bigkeys:扫描并统计每种数据类型中最大 Key(注意:此命令可能阻塞 Redis,建议在从节点或低峰期运行)。 -
MEMORY USAGE <key>:查询指定 Key 的内存占用(需 Redis 4.0+)。 -
慢查询日志 (
slowlog):通过slowlog get [n]查看最新慢查询,可能发现由大 Key 或复杂命令引起的操作。需在配置文件中设置slowlog-log-slower-than(慢查询阈值,单位微秒)和slowlog-max-len(慢日志最大长度)。 -
latency monitor:Redis 2.8.13+ 支持,可帮助追踪延迟 spikes 的来源,有时能间接反映大 Key 或热 Key 问题。
-
-
云服务商监控工具:许多云服务商(如腾讯云、阿里云)的 Redis 控制台提供大 Key 和热 Key 的分析功能,通常基于备份文件分析或实时采样,相对安全便捷。
-
自定义脚本与第三方工具:
-
使用
SCAN命令(非阻塞)遍历所有 Key,结合MEMORY USAGE或TYPE、LLEN、HLEN、SCARD等命令估算 Key 大小。 -
一些开源工具(如
redis-rdb-tools)可以分析 RDB 文件,找出大 Key。 -
通过在客户端代码中埋点或使用代理中间件统计 Key 的访问频次,识别热 Key。
-
-
业界实践:
-
对于热 Key 问题,京东开源的 JD-hotkey 中间件可以实时探测系统热数据。
-
应对大 Key 问题,可对其进行拆分(如一个大的 Hash 拆分成多个小的 Hash),或者对大 Key 进行监控并报警。
-
3.🧩 缓存雪崩、击穿与穿透监控
这三种情况都是缓存异常可能导致后端数据库压力激增甚至崩溃的问题。
| 问题类型 | 原因 | 监控重点与应对策略 |
|---|---|---|
| 缓存雪崩 | 同一时间大量缓存 Key 集中失效,或 Redis 实例宕机,导致所有请求涌向后端数据库。 | • 监控缓存过期时间分布:避免批量 Key 同时过期。 • 监控 Redis 实例状态: connected_clients, rejected_connections 激增可能是指标。• 保障高可用:主从复制、哨兵模式(Sentinel)或集群模式(Cluster)。 |
| 缓存击穿 | 某个热点 Key 失效的瞬间,大量请求直接击穿到数据库。 | • 识别热 Key:监控 Key 访问频率。 • 监控慢查询:数据库慢查询激增可能是结果。 • 策略:对热 Key 使用互斥锁更新或设置逻辑过期时间(永不过期,但后台异步更新)。 |
| 缓存穿透 | 访问大量不存在的数据(如不存在的用户 ID),请求绕过缓存直接访问数据库。 | • 监控 Key 查找失败率 (keyspace_misses):异常高可能是征兆。• 监控数据库 QPS:是否异常升高。 • 策略:接口校验、布隆过滤器(Bloom Filter)快速判断数据是否存在。 |
4.🛠️ 监控工具与实现建议
选择合适的工具能让监控事半功倍:
-
Redis 自带命令:
INFO,slowlog get,redis-cli --bigkeys,--latency等是基础。 -
云服务商监控平台:如果使用云 Redis,其控制台通常提供开箱即用的监控仪表盘和告警功能(如腾讯云)。
-
第三方监控系统:
-
Prometheus + Grafana:通过
redis_exporter抓取 Redis 指标,在 Grafana 中展示精美的监控大盘。 -
DataDog, Zabbix 等:也提供成熟的 Redis 监控集成。
-
-
自定义脚本:根据需要编写 Shell 或 Python 脚本定期收集特定指标,并接入已有的监控系统。
5. 监控体系搭建建议
-
明确监控目标:是为了保障稳定性、排查问题还是优化性能?
-
关注趋势和异常:不要只看瞬时值,指标的变化趋势和突然的异常波动往往更能说明问题。
-
设置合理的告警:对核心健康指标(如内存使用率、响应延迟、连接数、主从状态、
keyspace_misses激增等)设置告警,以便及时发现问题。 -
分层监控:从 Redis 实例层面到应用业务层面(如缓存命中率对业务的影响)进行监控。
希望这些信息能帮助你更好地构建 Redis 监控体系。有效的监控不仅能及时发现故障,更能帮助你预防问题的发生。
如果你有特定的 Redis 部署环境(如自建、云服务)或正在遭遇某些具体的性能瓶颈,分享出来或许能获得更具体的建议。
posted on
浙公网安备 33010602011771号