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 运维的核心诊断工具
- 重点关注:memory、stats、replication 三个 section
- mem_fragmentation_ratio > 1.5 表示碎片率高,需考虑重启
- evicted_keys > 0 表示内存不足
- keyspace_hits 与 misses 计算命中率,评估缓存效果
- instantaneous_ops_per_sec 监控当前 QPS
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容