Redis Command Info 命令(实战总结)

Redis Command Info 命令详解:从新手到进阶的实用指南

在 Redis 的众多命令中,INFO 命令或许不是最常被调用的一个,但它却是系统运维和性能排查中不可或缺的“万能钥匙”。无论是你正在调试缓存性能,还是想快速了解当前 Redis 实例的运行状态,INFO 命令都能提供一份详尽的“体检报告”。

这个命令不改变任何数据,也不会对性能造成影响,它只是安静地告诉你:当前 Redis 正在做些什么、用了多少内存、连接了多少客户端、是否开启了持久化……就像一位尽职的系统管家,默默记录着一切。

今天我们就来深入解析这个看似低调却极其实用的命令——Redis Command Info 命令。


什么是 Redis Command Info 命令?

INFO 命令是 Redis 提供的一个只读命令,用于获取 Redis 实例的详细运行信息。它返回一个结构化的文本信息,内容涵盖服务器状态、内存使用、客户端连接、持久化、主从复制、慢查询等多个维度。

你可以把它想象成一台服务器的“系统健康检查工具”。当你打开电脑,看到 CPU 占用率、内存使用情况、网络连接数时,INFO 命令就是 Redis 的“系统监控面板”。

执行方式非常简单:

INFO

这将返回完整的 Redis 信息摘要。如果你只想看某一部分内容,比如内存使用情况,可以指定类别:

INFO memory

或者查看持久化状态:

INFO persistence

✅ 小贴士:INFO 命令支持多个类别,用逗号分隔即可,如 INFO memory,clients,persistence


INFO 命令返回的主要信息分类

INFO 命令返回的信息分为多个逻辑模块,每个模块都对应着 Redis 的不同运行维度。下面我们将逐一拆解这些模块,帮助你真正读懂每一条数据的含义。

服务器信息(server)

这部分告诉你 Redis 实例的基本身份信息,包括版本、运行模式、操作系统、架构等。

redis_version:7.0.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:5c7f8f8e8b9a
redis_mode:standalone
os:Linux 5.15.0-105-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:11.4.0
run_id:5d64e3a2b5a0f3e8c3f2d1a0b1c5d9f7e4a6b8c9
tcp_port:6379
uptime_in_seconds:123456
uptime_in_days:1
  • redis_version:当前 Redis 版本,比如 7.0.12,建议保持更新以获取安全补丁。
  • redis_mode:运行模式,standalone 表示单机模式,cluster 表示集群模式。
  • uptime_in_seconds:Redis 已运行的秒数,可用于判断是否异常重启。
  • tcp_port:监听的端口,默认是 6379。

💡 比喻:这就像你查看手机的“设置 - 关于手机”页面,告诉你手机型号、系统版本、运行时长等基本信息。


内存使用情况(memory)

内存是 Redis 的核心资源,INFO memory 是最常被监控的部分。

used_memory:10485760
used_memory_human:10.00M
used_memory_rss:15728640
used_memory_rss_human:15.00M
used_memory_peak:12582912
used_memory_peak_human:12.00M
used_memory_peak_perc:83.33%
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
  • used_memory:Redis 实际使用的内存字节数。
  • used_memory_rss:操作系统分配给 Redis 进程的物理内存(包括 Redis 本身 + 内存碎片)。
  • used_memory_peak:历史最高内存使用量,可用于判断是否出现内存泄漏。
  • maxmemory:最大内存限制(如果设置了 maxmemory 配置),0 表示无限制。

🔍 实际建议:used_memory_rss 应该略大于 used_memory,但差距不应过大。如果 used_memory_rss 远大于 used_memory,说明内存碎片严重,可考虑重启或开启 active-defrag 自动碎片整理。


客户端连接信息(clients)

这部分告诉你当前有多少客户端正在连接 Redis。

connected_clients:15
client_recent_max_input_buffer:2048
client_recent_max_output_buffer:2048
blocked_clients:0
  • connected_clients:当前连接的客户端数量。如果突然飙升,可能是攻击或程序 Bug。
  • blocked_clients:被 BLPOPBRPOP 等阻塞命令阻塞的客户端数量。正常情况下应为 0,若持续非零,说明有大量阻塞操作。

⚠️ 警告:如果 connected_clients 持续增长且无法释放,可能是连接未正确关闭,建议检查代码中是否调用了 close()quit()


持久化状态(persistence)

持久化是 Redis 数据安全的保障。INFO persistence 会告诉你 RDB 和 AOF 的工作状态。

rdb_changes_since_last_save:1234
rdb_last_save_time:1712345678
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:1
rdb_current_bgsave_time_sec:-1
aof_enabled:1
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
  • rdb_last_save_time:上次 RDB 快照保存的时间戳(UNIX 时间)。
  • aof_enabled:是否启用 AOF(追加日志)持久化。
  • aof_rewrite_in_progress:AOF 重写是否正在进行。重写是为了压缩日志文件大小。

🛠️ 实用建议:如果 rdb_last_save_time 已经很久未更新,说明持久化可能失败了。需要检查磁盘空间、权限或配置。


主从复制状态(replication)

如果你使用 Redis 主从架构,INFO replication 能告诉你主库和从库的同步状态。

role:master
connected_slaves:2
slave0:ip=192.168.1.100,port=6380,state=online,offset=123456,lag=0
slave1:ip=192.168.1.101,port=6380,state=online,offset=123456,lag=0
master_repl_offset:123456
repl_backlog_active:1
repl_backlog_size:104857600
repl_backlog_first_byte_offset:1
repl_backlog_histlen:123456
  • role:当前节点角色,masterslave
  • connected_slaves:连接的从库数量。
  • lag:从库与主库的延迟(单位:秒)。如果 lag > 0,说明同步有延迟。
  • repl_backlog_histlen:复制积压缓冲区中已使用的字节数。

📌 关键点:lag 持续大于 0 时,说明从库跟不上主库的写入速度,可能影响读写分离的性能。


慢查询日志(slowlog)

慢查询日志是性能调优的重要依据。INFO slowlog 可以告诉你慢查询的统计信息。

slowlog_len:20
slowlog_max_len:128
slowlog_log_slower_than:10000
slowlog_sample_rate:1
  • slowlog_len:当前慢查询日志的条数。
  • slowlog_log_slower_than:慢查询的阈值(单位:微秒),默认 10000 微秒(10 毫秒)。
  • slowlog_max_len:最大记录条数。

🧩 使用建议:将 slowlog_log_slower_than 设置为 5000 微秒(5 毫秒)以下,有助于发现潜在性能瓶颈。


实际案例:如何用 INFO 命令排查问题?

假设你的系统突然变慢,用户反馈“缓存读取延迟高”。我们可以这样一步步排查:

  1. 查看连接数
    执行 INFO clients,发现 connected_clients 从 100 突增至 2000,说明连接未释放。

  2. 检查内存使用
    执行 INFO memory,发现 used_memory 持续增长,used_memory_peak 也在上升,怀疑内存泄漏。

  3. 查看持久化状态
    执行 INFO persistence,发现 rdb_last_save_time 已 3 小时未更新,说明 RDB 持久化失败。

  4. 检查慢查询
    执行 INFO slowlog,发现 slowlog_len 超过 100,说明存在大量慢查询。

最终定位问题:程序中未正确关闭 Redis 连接,导致连接池耗尽,同时 AOF 重写失败,造成磁盘满,最终导致性能急剧下降。

✅ 教训:定期监控 INFO 返回的关键指标,是预防线上故障的第一道防线。


总结与建议

Redis Command Info 命令虽然简单,但它的价值不可估量。它不仅是调试工具,更是运维的“第一手资料”。通过定期分析 INFO 的输出,你可以:

  • 及早发现内存泄漏
  • 监控连接池使用情况
  • 判断持久化是否正常
  • 定位慢查询瓶颈

建议将 INFO 命令集成到你的监控系统中,比如通过脚本定期调用并记录关键字段。你甚至可以写一个简单的 Shell 脚本,自动分析 used_memory 是否超过阈值,lag 是否异常。

🎯 最后提醒:INFO 命令是免费的、无副作用的、高效的。别让它被你忽略。每一次系统异常,都可以从它开始排查。

Redis Command Info 命令,看似不起眼,却是你与 Redis 深度沟通的桥梁。掌握它,就等于掌握了一把打开性能之门的钥匙。