Redis Info 命令(超详细)

Redis Info 命令:掌握 Redis 实例运行状态的“体检报告”

在使用 Redis 的过程中,你是否曾遇到过性能下降、连接异常,甚至数据丢失的情况?这时候,最需要的不是猜测,而是清晰的“诊断依据”。Redis 提供了一个强大而实用的命令——INFO,它就像 Redis 实例的“健康体检报告”,能全面展示当前服务器的运行状态、内存使用、网络连接、持久化情况等关键指标。

对于初学者来说,INFO 命令可能是你接触 Redis 时第一个真正“看得懂”的命令。它不涉及数据操作,却能让你快速了解整个 Redis 实例的“身体状况”。对于中级开发者,掌握 INFO 命令的细节,能帮助你在调优、排查问题时事半功倍。

本文将带你深入理解 Redis Info 命令的使用方法、输出结构、常见字段解读,并通过真实案例说明如何利用它定位问题。无论你是刚入门 Redis,还是正在维护线上服务,这篇文章都能帮你建立对 Redis 运行状态的系统性认知。


什么是 Redis Info 命令?

INFO 命令是 Redis 内置的一个只读命令,用于获取 Redis 服务器当前的运行信息。它返回一个文本格式的详细报告,内容涵盖从基本版本信息到内存使用、客户端连接、持久化机制、主从复制状态等多个维度。

你可以把它想象成一台服务器的“系统监控仪表盘”:不需要复杂操作,只需输入一个命令,就能看到 CPU 使用率、内存占用、连接数、慢查询记录等关键数据。

注意INFO 命令在生产环境中非常安全,不会影响 Redis 的正常运行,也不会产生写操作,因此可以随时使用。


基本用法与输出结构

最基础的用法是直接执行 INFO 命令,它会返回所有分类的信息。在 Redis 客户端中输入:

INFO

执行后,你会看到类似下面的输出(为简洁起见,仅展示部分):

redis_version:7.2.0
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:abc123def
redis_mode:standalone
os:Linux 5.15.0-76-generic x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:11.4.0
process_id:1234
run_id:5a3b7c1d
tcp_port:6379
uptime_in_seconds:3600
uptime_in_days:0
hz:10
lru_clock:1234567
executable:/usr/local/bin/redis-server
config_file:/etc/redis/redis.conf

connected_clients:10
client_recent_max_input_buffer:2048
client_recent_max_output_buffer:1024
blocked_clients:0

used_memory:1048576
used_memory_human:1.00M
used_memory_rss:2097152
used_memory_rss_human:2.00M
used_memory_peak:1048576
used_memory_peak_human:1.00M
used_memory_peak_perc:100.00%
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B

这些信息被分成了多个“章节”(Section),每个章节以 # 开头,如 # Server# Clients# Memory 等。每个章节下包含若干键值对,格式为 key:value


分类查看:按类别获取信息

有时候你并不需要全部信息,只想看某一部分。INFO 命令支持按类别筛选,例如:

INFO memory

这将只返回 # Memory 章节的内容,适合快速查看内存使用情况。

其他常见分类包括:

  • INFO clients:查看客户端连接数
  • INFO stats:查看命令统计、命中率等
  • INFO replication:查看主从复制状态(适用于主从架构)
  • INFO persistence:查看 RDB 和 AOF 持久化情况

小贴士:在生产环境中,建议定期运行 INFO memoryINFO stats,用于监控内存增长趋势和命令执行频率。


关键字段深度解读

内存使用情况(Memory)

used_memory:1048576
used_memory_human:1.00M
used_memory_rss:2097152
used_memory_rss_human:2.00M
used_memory_peak:1048576
used_memory_peak_human:1.00M
  • used_memory:Redis 内部使用的内存,单位字节。这是实际存储数据的内存。
  • used_memory_rss:操作系统层面看到的内存占用,通常比 used_memory 大,因为包含 Redis 进程的其他开销(如缓冲区、堆内存碎片)。
  • used_memory_peak:内存使用峰值,用于判断是否有内存增长趋势。

注意:如果 used_memory 接近 maxmemory(如果设置了),说明内存可能不足,需考虑优化数据结构或增加内存。


客户端连接数(Clients)

connected_clients:10
blocked_clients:0
  • connected_clients:当前连接到 Redis 的客户端数量。如果数值持续增长,可能是连接未释放,需检查代码中的连接池配置。
  • blocked_clients:被 BLPOPBRPOP 等阻塞命令阻塞的客户端数量。正常情况下应为 0,如果长期大于 0,可能表示有消费者未及时处理消息。

持久化状态(Persistence)

rdb_last_save_time:1712345678
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:1
aof_enabled:1
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_bgrewrite_status:ok
  • rdb_last_save_time:最后一次 RDB 快照保存的时间戳。
  • rdb_last_bgsave_status:RDB 保存是否成功,ok 表示正常。
  • aof_enabled:AOF 是否启用。建议开启,提高数据安全性。
  • aof_rewrite_in_progress:AOF 重写是否正在进行。若长期为 1,可能表示 AOF 文件过大,需要手动触发 BGREWRITEAOF

建议:在生产环境,应启用 AOF 并定期检查 aof_rewrite_in_progress 状态。


命令统计(Stats)

total_commands_processed:123456
instantaneous_ops_per_sec:150
keyspace_hits:95000
keyspace_misses:5000
keyspace_hit_ratio:0.95
  • total_commands_processed:自 Redis 启动以来处理的命令总数。
  • instantaneous_ops_per_sec:每秒处理的命令数。可用于判断系统负载。
  • keyspace_hitskeyspace_misses:缓存命中与未命中的次数。
  • keyspace_hit_ratio:缓存命中率。如果低于 90%,说明缓存效果不佳,可能需要优化 key 设计或数据结构。

实战建议:当 keyspace_hit_ratio 突然下降时,可能是缓存失效或 key 未命中,应立即排查。


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

假设你发现某个接口响应变慢,怀疑是 Redis 性能问题。你可以按以下步骤排查:

  1. 查看连接数

    INFO clients
    

    如果 connected_clients 超过 1000,说明连接数过多,可能是连接池未正确释放。

  2. 检查内存使用

    INFO memory
    

    如果 used_memory 接近 maxmemory,且 used_memory_peak 也在上升,说明内存增长过快,需检查是否有 key 未设置过期时间。

  3. 分析缓存命中率

    INFO stats
    

    如果 keyspace_hit_ratio 低于 80%,说明缓存效果差,应优化 key 命名或增加缓存粒度。

  4. 确认持久化状态

    INFO persistence
    

    如果 aof_rewrite_in_progress 长时间为 1,说明 AOF 重写卡住,可能影响性能。

通过以上步骤,你就能快速定位问题根源。


高级技巧:结合脚本自动化监控

你可以将 INFO 命令输出通过脚本解析,实现自动监控。例如,用 Bash 脚本提取内存使用率:

#!/bin/bash
INFO_OUTPUT=$(redis-cli INFO memory)

USED_MEMORY=$(echo "$INFO_OUTPUT" | grep "used_memory:" | awk '{print $2}')
MAX_MEMORY=$(echo "$INFO_OUTPUT" | grep "maxmemory:" | awk '{print $2}')

if [ "$MAX_MEMORY" = "0" ]; then
    echo "内存无限制,当前使用: $USED_MEMORY bytes"
else
    PERCENT=$(echo "scale=2; $USED_MEMORY * 100 / $MAX_MEMORY" | bc)
    echo "内存使用率: $PERCENT%"
fi

提示:将此脚本加入定时任务(如 crontab),可实现对 Redis 的持续监控。


总结:Redis Info 命令是你的运维利器

Redis Info 命令 是 Redis 管理中不可或缺的工具。它不复杂,却信息量巨大。从初学者到资深开发者,都能从中获益。

掌握它,意味着你不再“盲目”使用 Redis,而是能主动观察、分析、优化系统。无论是排查性能问题、监控资源使用,还是进行容量规划,INFO 命令都是你最可靠的伙伴。

下次当你遇到 Redis 问题时,别急着翻文档,先执行 INFO 命令,看看“体检报告”怎么说。你会发现,很多问题,其实早就在那里等着你发现。