Redis 统计信息详解(基于 info 命令)
Redis 的 info 命令是监控和诊断 Redis 实例的核心工具,它返回服务器运行状态、内存使用、持久化、主从复制等多维度的统计信息。本文基于 Redis 6.2.1 版本,解析 info 命令的输出结构及关键指标,帮助你快速定位问题并优化性能。
info 命令基础
- 使用方式:
在redis-cli中执行info查看完整信息,或通过info <section>查看指定模块(如info memory查看内存信息)。 - 输出结构:信息按模块划分(如
Server、Clients、Memory等),每个模块包含若干键值对指标。
核心模块及关键指标解析
1. Server:服务器基础信息
记录 Redis 版本、运行模式、进程信息等基础参数,核心指标:
| 指标 | 说明 | 关注点 |
|---|---|---|
redis_version |
Redis 版本号(如 6.2.1)。 |
确认版本是否兼容新特性(如 6.0+ 支持多线程)。 |
redis_mode |
运行模式(standalone 单机 / cluster 集群 / sentinel 哨兵)。 |
验证部署模式是否符合预期。 |
process_id |
Redis 进程 PID。 | 用于定位进程(如 kill -9 <pid> 终止进程)。 |
uptime_in_seconds |
运行时长(秒)。 | 结合故障时间判断是否刚重启过。 |
lru_clock |
LRU 时钟(分钟级自增),用于过期键淘汰。 | 无直接监控意义,内部用于 LRU 算法。 |
2. Clients:客户端连接信息
监控客户端连接状态,核心指标:
| 指标 | 说明 | 关注点 |
|---|---|---|
connected_clients |
当前连接的客户端数量。 | 若持续增长,可能是客户端未正常释放连接(检查 timeout 配置)。 |
maxclients |
最大允许的客户端连接数(由 maxclients 配置)。 |
若 connected_clients 接近此值,需调大配置避免连接被拒绝。 |
blocked_clients |
处于阻塞状态的客户端数量(如执行 BLPOP、BRPOP 等命令)。 |
若过大,可能是阻塞命令未及时获取数据(如消息队列为空)。 |
client_recent_max_input_buffer |
最近客户端输入缓冲区的最大值(字节)。 | 过大可能是客户端发送大命令(如批量 MSET),需警惕 OOM。 |
3. Memory:内存使用信息
最关键的模块之一,反映内存占用和碎片化情况,核心指标:
| 指标 | 说明 | 关注点 |
|---|---|---|
used_memory |
Redis 分配的内存总量(字节,含数据、缓冲区、Lua 脚本等)。 | 结合 maxmemory 判断是否接近内存上限。 |
used_memory_human |
人类可读的内存总量(如 1.03M)。 |
快速判断内存规模(如是否超过预期的 1GB)。 |
used_memory_rss |
操作系统分配给 Redis 进程的物理内存( Resident Set Size)。 | 若 used_memory_rss 远大于 used_memory,表示内存碎片化严重(mem_fragmentation_ratio > 1.5 需优化)。 |
used_memory_peak |
内存使用峰值(字节)。 | 若峰值接近 maxmemory,需警惕内存溢出风险。 |
mem_fragmentation_ratio |
内存碎片率(used_memory_rss / used_memory)。 |
- 大于 1.5:碎片严重,考虑重启 Redis 释放碎片。 - 小于 1:部分内存被换出到 swap,性能会下降(需禁用 swap)。 |
maxmemory |
最大可用内存(字节,0 表示无限制)。 |
生产环境必须设置(如物理内存的 70%),避免耗尽系统内存。 |
maxmemory_policy |
内存淘汰策略(如 noeviction、allkeys-lru)。 |
缓存场景需设置为 allkeys-lru 或 volatile-lru。 |
4. Persistence:持久化信息
反映 RDB 和 AOF 持久化状态,核心指标:
| 指标 | 说明 | 关注点 |
|---|---|---|
loading |
是否正在加载持久化文件(0 否 / 1 是)。 |
若启动后长期为 1,可能是持久化文件过大或损坏。 |
rdb_bgsave_in_progress |
是否正在后台生成 RDB 快照(0 否 / 1 是)。 |
频繁生成 RDB 会消耗 CPU 和 IO,需调整 save 配置。 |
rdb_last_save_time |
最后一次 RDB 快照生成的时间戳。 | 结合业务判断快照是否按时生成(如每小时一次)。 |
rdb_last_bgsave_status |
最后一次 RDB 生成结果(ok / err)。 |
若为 err,检查磁盘空间或权限(stop-writes-on-bgsave-error 可能导致写操作阻塞)。 |
aof_enabled |
是否开启 AOF 持久化(0 否 / 1 是)。 |
生产环境建议开启(yes),提升数据安全性。 |
aof_rewrite_in_progress |
是否正在后台重写 AOF 文件(0 否 / 1 是)。 |
重写会消耗资源,避免与 RDB 同时执行(Redis 会自动规避)。 |
5. Stats:通用统计信息
记录命令执行、连接、过期键等全局统计,核心指标:
| 指标 | 说明 | 关注点 |
|---|---|---|
total_commands_processed |
累计执行的命令总数。 | 结合运行时间计算 QPS(total_commands_processed / uptime_in_seconds)。 |
instantaneous_ops_per_sec |
每秒执行的命令数(实时 QPS)。 | 峰值是否超过 Redis 承载能力(单机通常支持 10 万 + QPS)。 |
rejected_connections |
因 maxclients 限制被拒绝的连接数。 |
非零表示连接数已达上限,需调大 maxclients。 |
expired_keys |
累计因过期被删除的键数。 | 突增可能是大量键同时过期(需优化过期时间随机性)。 |
evicted_keys |
因内存不足被淘汰的键数(maxmemory_policy 非 noeviction 时)。 |
非零表示内存不足,需扩容或优化淘汰策略。 |
keyspace_hits / keyspace_misses |
缓存命中 / 未命中次数。 | 命中率 = hits / (hits + misses),应 > 90%,否则缓存设计不合理。 |
6. Replication:主从复制信息
主从或集群架构的关键指标:
| 指标 | 说明 | 关注点 |
|---|---|---|
role |
节点角色(master 主节点 / slave 从节点)。 |
验证主从关系是否正确(如从节点应显示 slave)。 |
connected_slaves |
主节点连接的从节点数量。 | 若少于预期,检查从节点是否正常连接(网络、密码是否正确)。 |
master_repl_offset |
主节点的复制偏移量(数据同步进度)。 | 从节点的 slave_repl_offset 应接近此值,否则同步延迟过大。 |
repl_backlog_size |
复制积压缓冲区大小(字节)。 | 过小可能导致从节点断线后需全量同步(建议设为 100MB+ 用于高写入场景)。 |
7. CPU:CPU 使用信息
反映 Redis 对 CPU 的消耗:
| 指标 | 说明 | 关注点 |
|---|---|---|
used_cpu_sys / used_cpu_user |
系统态 / 用户态 CPU 耗时(秒)。 | 占比过高可能是命令执行效率低(如 KEYS 命令)或网络 IO 繁忙。 |
used_cpu_sys_children / used_cpu_user_children |
后台进程(如 RDB/AOF 子进程)的系统态 / 用户态 CPU 耗时。 | 若过大,可能是持久化操作频繁(如 RDB 生成过勤)。 |
8. Keyspace:键空间统计
按数据库划分的键数量统计:
1 | db0:keys=15,expires=0,avg_ttl=0 |
keys:数据库中的键总数。expires:设置了过期时间的键数。avg_ttl:键的平均剩余生存时间(秒)。
关注点:
- 某数据库键数量突增可能是内存泄漏(如未设置过期时间的临时键)。
expires为 0 表示所有键永不过期,需确认是否符合业务预期。
实用场景与分析技巧
- 性能瓶颈定位:
- 若
instantaneous_ops_per_sec低但used_cpu_user高:存在慢命令(如HGETALL大哈希表),用slowlog get排查。 - 若
mem_fragmentation_ratio > 1.5:内存碎片严重,可重启 Redis 或开启activedefrag(主动碎片整理)。
- 若
- 可用性监控:
connected_slaves与预期不符:检查主从复制配置(replicaof、masterauth)。aof_last_write_status:err:AOF 写入失败,可能是磁盘满或权限问题,需紧急处理(否则appendfsync everysec可能丢失数据)。
- 缓存有效性分析:
- 命中率
keyspace_hits/(keyspace_hits + keyspace_misses)过低:优化缓存策略(如增加热点数据缓存时间)
- 命中率