菜鸟科技网

Redis info命令如何高效获取关键信息?

命令简介

INFO 命令用于返回 Redis 服务器的各种信息和统计值,这些信息对于调试、监控和了解服务器的运行状况至关重要。

Redis info命令如何高效获取关键信息?-图1
(图片来源网络,侵删)

基本语法:

INFO [section]
  • section (可选): 指定要获取的信息类别,如果不提供 section,命令将返回所有信息,这可能会产生大量的输出,在生产环境中通常不推荐这样做。

主要信息类别 (section)

INFO 命令支持多种 section,每个 section 提供特定方面的信息,以下是常用的一些 section

Section 描述
server 服务器 的常规信息,如 Redis 版本、运行时间、进程 ID 等。
clients 客户端 连接信息,如已连接客户端的数量、阻塞的客户端数量等。
memory 内存 使用情况,如已用内存、峰值内存、内存碎片率等。(极其重要)
persistence 持久化 相关信息,如 RDB 最后保存时间、AOF 当前重写状态等。
stats 一般统计 信息,如总连接数、命令执行次数、键过期数等。
replication 复制 相关信息,如主从复制状态、主库 ID、从库 ID 等。
cpu CPU 使用统计,如累计使用的 CPU 时间、系统 CPU 时间等。
commandstats 命令统计,显示每个命令执行的次数和消耗的 CPU 时间。
cluster 集群 状态信息,仅在集群模式下有效。
keyspace 数据库键空间 信息,显示每个数据库的键数量和过期键数量。

常用 section 详解及示例

1 INFO server - 服务器信息

这个部分提供了 Redis 实例的基本元数据。

0.0.1:6379> INFO server
# Server
redis_version:7.0.11          # Redis 版本
redis_git_sha1:00000000        # Git SHA1
redis_git_dirty:0              # Git 是否有未提交的更改
redis_build_id:0e3a8c5e4a3e8c5e # 构建ID
redis_mode:standalone          # 运行模式: standalone, cluster, sentinel
os:Linux 5.4.0-150-generic x86_64 # 操作系统
arch_bits:64                   # 架构位数
process_id:12345               # Redis 进程ID
run_id:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 实例的唯一ID
tcp_port:6379                  # 监听端口
uptime_in_seconds:123456       # 运行总秒数
uptime_in_days:1               # 运行总天数
hz:10                          # 内部定时器频率
lru_clock:12345678             # LRU 时钟
executable:/usr/bin/redis-server
config_file:/etc/redis/redis.conf

关键指标:

Redis info命令如何高效获取关键信息?-图2
(图片来源网络,侵删)
  • redis_version: 确认你运行的版本。
  • uptime_in_days: 服务器运行了多久,用于稳定性评估。
  • process_id: 用于进程管理,如 killgdb 调试。

2 INFO memory - 内存信息

这是最常用的部分之一,对于排查内存问题和性能瓶颈至关重要。

0.0.1:6379> INFO memory
# Memory
used_memory:123456789          # Redis 使用的总内存字节数
used_memory_human:117.7M       # 人类可读的格式
used_memory_rss:150000000      # 操作系统分配给 Redis 的物理内存
used_memory_peak:200000000     # Redis 历史峰值内存
used_memory_peak_human:190.7M
used_memory_lua:32768          # Lua 脚本引擎占用的内存
maxmemory:0                    # 设置的最大内存限制 (0表示不限制)
maxmemory_policy:noeviction    # 内存达到上限后的策略
mem_fragmentation_ratio:1.21   # **内存碎片率 = used_memory_rss / used_memory**
mem_allocator:jemalloc-5.1.0   # 使用的内存分配器
...

关键指标解读:

  • used_memory: Redis 数据本身占用的内存。
  • used_memory_rss: Redis 实际占用的物理内存。
  • mem_fragmentation_ratio (内存碎片率):
    • 理想值: 接近 1.0,表示 used_memoryused_memory_rss 几乎相等,内存利用率高。
    • > 1.5 (偏高): 可能表示存在内存碎片,这通常发生在 Redis 有大量键被删除,但操作系统没有及时回收内存的情况下,对于 64 位系统,轻微的碎片是正常的。
    • < 1.0 (偏低): 这是一种非常危险的情况,表示 Redis 的内存超出了物理内存,使用了交换分区,这会导致 Redis 性能急剧下降,应立即排查。
  • maxmemorymaxmemory_policy: 如果设置了最大内存,需要关注内存淘汰策略是否生效。

3 INFO stats - 统计信息

提供全局的运行统计。

0.0.1:6379> INFO stats
# Stats
total_connections_received:12345 # 总共接受的连接数
total_commands_processed:98765  # 总共执行的命令数
instantaneous_ops_per_sec:150    # **每秒执行命令数**
total_net_input_bytes:123456789 # 总网络输入字节数
total_net_output_bytes:987654321 # 总网络输出字节数
...

关键指标:

Redis info命令如何高效获取关键信息?-图3
(图片来源网络,侵删)
  • instantaneous_ops_per_sec: 当前每秒操作的速率,是衡量 Redis 负载的核心指标。

4 INFO replication - 复制信息

在主从架构中,这部分信息用于监控复制状态。

# 主库视角
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.100,port=6380,state=online,offset=123456,lag=1
slave1:ip=192.168.1.101,port=6380,state=online,offset=123400,lag=0
master_replid:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:123456
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:123456
...
# 从库视角
127.0.0.1:6380> INFO replication
# Replication
role:slave
master_host:192.168.1.99
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:123456
...

关键指标:

  • role: 区分主库 (master) 和从库 (slave)。
  • connected_slaves: 主库连接的从库数量。
  • state: 从库的状态,如 online (在线)、connecting (连接中)。
  • lag: 从库与主库的复制延迟(秒数),延迟过高需要关注。

5 INFO keyspace - 键空间信息

显示每个数据库中的键数量和带有过期时间的键数量。

0.0.1:6379> INFO keyspace
# Keyspace
db0:keys=1500,expires=100,avg_ttl=12345678
db1:keys=50,expires=0

关键指标:

  • dbX:keys=Y: 数据库 X 中有 Y 个键。
  • dbX:expires=Z: 数据库 X 中有 Z 个键设置了过期时间。
  • avg_ttl: 平均 TTL (Time To Live),对于设置了过期时间的键。

高级用法

1 获取多个 section

你可以使用空格分隔多个 section 来一次性获取不同类别的信息。

INFO server memory stats

2 动态更新 commandstats

默认情况下,INFO commandstats 提供的是从服务器启动以来的累计数据,你可以通过 CONFIG 命令重置这些统计数据,以便监控特定时间段内的命令使用情况。

# 重置命令统计
CONFIG RESETSTAT
# 现在再执行 INFO commandstats,数据将从0开始计算
INFO commandstats

3 编程中获取 INFO

在代码中(如 Python),你通常会使用 Redis 客户端库来获取这些信息。

Python (使用 redis-py) 示例:

import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 获取所有信息 (返回字典)
info_all = r.info()
print(f"Redis Version: {info_all['redis_version']}")
print(f"Used Memory: {info_all['used_memory_human']}")
# 获取特定 section 的信息 (返回字典)
info_memory = r.info('memory')
print(f"Memory Fragmentation Ratio: {info_memory['mem_fragmentation_ratio']}")
# 重置命令统计
r.config_resetstat()

INFO 命令是 Redis 运维和开发的“瑞士军刀”,熟练掌握它,能够帮助你:

  • 快速诊断问题: 比如通过 INFO memory 查看内存是否耗尽,通过 INFO replication 检查主从同步是否正常。
  • 监控系统性能: 通过 INFO statsinstantaneous_ops_per_sec 监控 QPS,通过 INFO memory 监控内存使用情况。
  • 规划容量: 通过 INFO memoryused_memory_peak 了解历史峰值,为扩容提供依据。

在实际使用中,推荐总是指定具体的 section,以获得清晰、聚焦的输出,避免不必要的数据传输和解析开销。

分享:
扫描分享到社交APP
上一篇
下一篇