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 memory和INFO 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:被BLPOP、BRPOP等阻塞命令阻塞的客户端数量。正常情况下应为 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_hits和keyspace_misses:缓存命中与未命中的次数。keyspace_hit_ratio:缓存命中率。如果低于 90%,说明缓存效果不佳,可能需要优化 key 设计或数据结构。
实战建议:当
keyspace_hit_ratio突然下降时,可能是缓存失效或 key 未命中,应立即排查。
实际案例:如何用 Redis Info 命令排查问题?
假设你发现某个接口响应变慢,怀疑是 Redis 性能问题。你可以按以下步骤排查:
-
查看连接数:
INFO clients如果
connected_clients超过 1000,说明连接数过多,可能是连接池未正确释放。 -
检查内存使用:
INFO memory如果
used_memory接近maxmemory,且used_memory_peak也在上升,说明内存增长过快,需检查是否有 key 未设置过期时间。 -
分析缓存命中率:
INFO stats如果
keyspace_hit_ratio低于 80%,说明缓存效果差,应优化 key 命名或增加缓存粒度。 -
确认持久化状态:
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 命令,看看“体检报告”怎么说。你会发现,很多问题,其实早就在那里等着你发现。