INFO 命令关键指标:Redis 健康检查的”仪表盘”

INFO 命令关键指标:Redis 健康检查的”仪表盘”

INFO 命令概述

INFO 是 Redis 最重要的诊断命令,返回 Redis 实例的详细运行状态信息。理解这些指标是 Redis 运维的基础。

redis-cli INFO             # 获取所有信息
redis-cli INFO SERVER      # 获取服务器信息
redis-cli INFO CLIENTS     # 获取客户端信息
redis-cli INFO MEMORY      # 获取内存信息
redis-cli INFO PERSISTENCE # 获取持久化信息
redis-cli INFO STATS       # 获取统计信息
redis-cli INFO REPLICATION # 获取主从信息
redis-cli INFO CPU         # 获取 CPU 信息
redis-cli INFO COMMANDSTATS # 获取命令统计
redis-cli INFO KEYSPACE    # 获取键空间信息
redis-cli INFO ALL         # 获取所有信息

关键指标详解

SERVER:基本信息

# Server
redis_version:7.0.0         # Redis 版本
uptime_in_seconds:1234567   # 启动时长(秒)
uptime_in_days:14           # 启动天数
config_file:/etc/redis/redis.conf  # 配置文件路径

关注点:uptime 正常代表实例未重启;config_file 确认配置文件加载正确。

CLIENTS:连接情况

# Clients
connected_clients:100           # 当前连接数
client_longest_output_list:0    # 最长输出列表
client_biggest_input_buf:4096   # 最大输入缓冲
blocked_clients:0               # 阻塞客户端数

关注点
connected_clients:与 maxclients 对比,判断连接池是否够用
blocked_clients:不应长期 > 0,可能表示有慢查询
client_longest_output_list:若很大,可能有 BigKey 导致输出队列堆积

MEMORY:内存使用

# Memory
used_memory:1048576000            # Redis 实际使用的内存(字节)
used_memory_human:1000.00M       # 人类可读格式
used_memory_rss:1258291200        # 系统分配给 Redis 的内存(RSS)
used_memory_peak:2097152000       # 历史峰值内存
used_memory_peak_human:2.00G
used_memory_lua:37888             # Lua 引擎占用内存
maxmemory:2147483648              # 最大内存限制
maxmemory_human:2.00G            # 人类可读格式
maxmemory_policy:allkeys-lru     # 淘汰策略
mem_fragmentation_ratio:1.2      # 内存碎片率
mem_allocator:jemalloc-5.2.1     # 内存分配器

关键关注点

指标 正常范围 异常含义
used_memory < maxmemory 接近 maxmemory 时会有淘汰
mem_fragmentation_ratio 1.0-1.5 > 1.5 表示碎片严重,< 1.0 可能 swap
used_memory_peak 关注的趋势 频繁出现新峰值说明内存增长快

STATS:操作统计

# Stats
total_connections_received:5000     # 累计连接数
total_commands_processed:10000000   # 累计命令数
instantaneous_ops_per_sec:5000      # 当前 QPS
total_net_input_bytes:53687091200   # 总输入流量
total_net_output_bytes:107374182400 # 总输出流量
instantaneous_input_kbps:125.00     # 当前输入速率
instantaneous_output_kbps:250.00    # 当前输出速率
rejected_connections:0             # 拒绝的连接数
expired_keys:10000                 # 过期的 key 数
evicted_keys:0                     # 驱逐的 key 数
keyspace_hits:990000               # 命中次数
keyspace_misses:10000              # 未命中次数

关键关注点
instantaneous_ops_per_sec:当前 QPS,判断负载
keyspace_hits / keyspace_misses:计算命中率 = hits/(hits+misses)
evicted_keys:> 0 说明内存不足正在淘汰,需扩容
rejected_connections:> 0 说明连接数超上限

PERSISTENCE:持久化状态

# Persistence
rdb_last_save_time:1700000000      # 上次 RDB 保存时间
rdb_last_bgsave_status:ok          # 上次 BGSAVE 状态
rdb_last_bgsave_time_sec:5         # 上次 BGSAVE 耗时
aof_enabled:1                      # AOF 是否开启
aof_last_rewrite_time_sec:3        # 上次 AOF 重写耗时
aof_current_size:524288000         # AOF 当前文件大小
aof_base_size:524288000            # AOF 基础文件大小

关注点
– RDB 保存频率是否符合预期
– AOF 文件增长趋势
– BGSAVE 和 AOF 重写耗时,过久可能影响性能

REPLICATION:主从复制

# Replication
role:master                        # 角色
connected_slaves:2                 # 从库数量
master_repl_offset:100000          # 主复制偏移量
repl_backlog_active:1              # 复制积压缓冲区是否活跃
repl_backlog_size:1048576          # 缓冲区大小
repl_backlog_histlen:1048576       # 缓冲区使用量
# 从库视角
role:slave
master_host:192.168.1.100
master_port:6379
master_link_status:up              # 主从连接状态
slave_repl_offset:99000            # 从库复制偏移量
slave_lag:1                        # 从库延迟(秒)

关注点
slave_lag:从库延迟,持续增大说明同步跟不上
master_link_status:必须为 up
master_repl_offset - slave_repl_offset:差值表示同步延迟量

CPU:CPU 使用

# CPU
used_cpu_sys:12345.67              # 内核态 CPU 时间(秒)
used_cpu_user:23456.78             # 用户态 CPU 时间(秒)
used_cpu_sys_children:0.00         # 子进程内核态 CPU 时间
used_cpu_user_children:1.23        # 子进程用户态 CPU 时间(如 BGSAVE)

关注点
– CPU 使用率通过差值计算
– used_cpu_*_children 过高表示 BGSAVE/AOF 重写频繁

KEYSPACE:库统计

# Keyspace
db0:keys=1000000,expires=500000,avg_ttl=3600000
  • keys:key 总数
  • expires:设置了过期时间的 key 数
  • avg_ttl:平均过期时间(毫秒)

健康检查速查表

def redis_health_check(redis):
    """快速检查 Redis 健康状态"""
    info = redis.info()

    issues = []

    # 1. 内存
    used_pct = info['used_memory'] / info['maxmemory'] * 100
    if used_pct > 80:
        issues.append(f"内存使用率 {used_pct:.1f}% > 80%")

    # 2. 碎片率
    if info['mem_fragmentation_ratio'] > 2.0:
        issues.append(f"内存碎片率 {info['mem_fragmentation_ratio']:.2f}")

    # 3. 淘汰 key
    if info['evicted_keys'] > 0:
        issues.append(f"有 {info['evicted_keys']} 个 key 被淘汰")

    # 4. 命中率
    total = info['keyspace_hits'] + info['keyspace_misses']
    if total > 0:
        hit_rate = info['keyspace_hits'] / total * 100
        if hit_rate < 90:
            issues.append(f"缓存命中率 {hit_rate:.1f}% < 90%")

    # 5. 拒绝连接
    if info['rejected_connections'] > 0:
        issues.append("有连接被拒绝")

    # 6. 主从延迟
    if info.get('master_link_status') == 'down':
        issues.append("主从连接断开")

    return issues

面试要点

  • INFO 命令是 Redis 运维的核心诊断工具
  • 重点关注:memorystatsreplication 三个 section
  • mem_fragmentation_ratio > 1.5 表示碎片率高,需考虑重启
  • evicted_keys > 0 表示内存不足
  • keyspace_hits 与 misses 计算命中率,评估缓存效果
  • instantaneous_ops_per_sec 监控当前 QPS
© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容