一、Redis性能监控的重要性

Redis作为内存数据库的扛把子,性能监控就像给跑车装仪表盘。没有监控的Redis就像蒙眼开车,指不定什么时候就撞墙了。我们常见的问题包括:

  • 内存突然爆满导致服务不可用
  • 命令执行变慢影响用户体验
  • 连接数暴涨拖垮整个系统

通过redis-cli和Prometheus这对黄金组合,我们可以把Redis的内部状态变成可视化数据,就像给数据库做了个全身CT扫描。

二、redis-cli基础监控命令

先来看看redis-cli这个瑞士军刀怎么用。以下是最实用的几个命令示例:

# 查看Redis基础信息(技术栈:Redis CLI)
redis-cli INFO
# 这个命令会返回200+行监控数据,包含服务器、客户端、内存等16个模块

# 查看内存使用情况(重点关注used_memory_human)
redis-cli INFO memory | grep used_memory_human
# 返回示例:used_memory_human:1.2G

# 监控慢查询(单位:微秒)
redis-cli SLOWLOG GET 5
# 这会显示最近5条执行时间超过阈值的命令

三、关键性能指标深度解析

3.1 内存相关指标

# 内存碎片率(>1.5就需要警惕了)
redis-cli INFO memory | grep mem_fragmentation_ratio
# 示例输出:mem_fragmentation_ratio:1.23

# 内存淘汰情况
redis-cli INFO stats | grep evicted_keys
# 这个数字持续增长说明内存不足

3.2 命令执行指标

# 查看命令统计(注意OPS突增)
redis-cli INFO commandstats
# 输出示例:
# cmdstat_get:calls=123456,usec=1234567,usec_per_call=10.0
# cmdstat_set:calls=7890,usec=456789,usec_per_call=57.8

四、Prometheus集成实战

4.1 配置Redis exporter

# docker-compose.yml配置示例(技术栈:Docker+Prometheus)
services:
  redis_exporter:
    image: oliver006/redis_exporter
    ports:
      - "9121:9121"
    command:
      - "--redis.addr=redis://redis:6379"
    depends_on:
      - redis

4.2 Prometheus关键查询

# 内存使用率查询
100 * (redis_memory_used_bytes / redis_memory_max_bytes)

# 客户端连接数监控
redis_connected_clients

# 命令延迟百分位统计
histogram_quantile(0.95, sum(rate(redis_commands_duration_seconds_bucket[1m])) by (le))

五、典型问题排查案例

案例1:内存突然增长

# 1. 先看哪个key占内存(技术栈:Redis CLI)
redis-cli --bigkeys
# 示例输出:
# Biggest string found 'user:session:abcd' has 12 bytes

# 2. 查看内存分配情况
redis-cli MEMORY MALLOC-STATS

案例2:响应变慢

# 1. 检查是否达到内存上限
redis-cli INFO memory | grep -E 'used_memory|maxmemory'

# 2. 查看持久化阻塞情况
redis-cli INFO persistence | grep -E 'rdb_bgsave_in_progress|aof_rewrite_in_progress'

六、性能优化建议

  1. 内存优化三把斧:

    • 合理设置maxmemory-policy
    • 对大key进行拆分
    • 使用ziplist等紧凑结构
  2. 持久化调优:

    # 在redis.conf中调整
    save 900 1       # 15分钟至少1个key变化才保存
    aof-rewrite-incremental-fsync yes
    

七、监控方案对比

工具 实时性 存储时长 报警能力
redis-cli 实时 不存储
Prometheus 准实时 长期 强大
Grafana 依赖数据源 依赖数据源 中等

八、避坑指南

  1. 不要监控所有指标:重点采集10-15个核心指标即可
  2. 避免频繁执行MONITOR命令:这个命令会产生大量开销
  3. 注意exporter资源消耗:单个exporter监控实例不要超过50个

九、总结与展望

通过redis-cli可以快速诊断问题,而Prometheus提供了长期监控能力。建议生产环境至少部署以下监控:

  • 内存使用率
  • 命令延迟百分位
  • 连接数变化
  • 持久化状态

未来可以结合机器学习算法,实现异常检测和自动扩容等高级功能。