跳转至

Redis Info 信息注释说明

Overview

  • 起始版本: 1.0.0
  • 最新版本: 8.2.x
  • 官方文档: https://redis.io/docs/latest/commands/info/
  • 操作语法:

    INFO [section [section ...]]
    
  • Time complexity: O(1)

  • ACL categories: @slow, @dangerous
  • arguments: Starting with Redis version 7.0.0: Added support for taking multiple section arguments.

Section Intro

INFO 命令以一种计算机易于解析、人类易于阅读的格式返回服务器的信息和统计信息。

可选参数可用于选择特定的信息部分:

  • server: 关于 Redis 服务器的一般信息。
  • clients: 客户端连接信息部分。
  • memory: 内存消耗相关信息。
  • persistence: RDB 和 AOF 相关信息。
  • threads: I/O 线程信息,自 8.0.x 版本起。
  • stats: 一般统计信息。
  • replication: 主/从复制信息。
  • cpu: CPU 消耗统计信息。
  • commandstats: Redis 命令统计信息。
  • latencystats: Redis 命令延迟百分位分布统计信息。
  • sentinel: Redis Sentinel 部分(仅适用于 Sentinel 实例)。
  • cluster: Redis Cluster 部分。
  • modules: 模块部分。
  • keyspace: 数据库相关统计信息。
  • errorstats: Redis 错误统计信息。

还可以接受以下值:

  • all: 返回所有部分(不包括模块生成的部分)。
  • default: 仅返回默认的一组部分。
  • everything: 包含 all 和 modules。

当不提供参数时,假定为 default 选项。

./redis-cli [-h] [-p] [-a] INFO

Sections

根据 Redis 的版本,某些字段可能已被添加或移除。因此,一个健壮的客户端应用程序在解析此命令的结果时,应跳过未知属性,并优雅地处理缺失的字段。

以下是针对 Redis >= 2.4 版本的字段描述。

server

以下是 server 部分中所有字段的含义:

server fields

  • redis_version: Redis 服务器的版本。
  • redis_git_sha1: Git SHA1。
  • redis_git_dirty: Git 脏标志。
  • redis_build_id: 构建 ID。
  • redis_mode: 服务器的模式("standalone"(独立)、"sentinel"(哨兵)或 "cluster"(集群))。
  • os: 托管 Redis 服务器的操作系统。
  • arch_bits: 架构(32 或 64 位)。
  • multiplexing_api: Redis 使用的事件循环机制。
  • atomicvar_api: Redis 使用的 Atomicvar API。
  • gcc_version: 用于编译 Redis 服务器的 GCC 编译器版本。
  • process_id: 服务器进程的 PID。
  • process_supervised: 监管系统("upstart"、"systemd"、"unknown" 或 "no")。
  • run_id: 识别 Redis 服务器的随机值(由 Sentinel 和 Cluster 使用)。
  • tcp_port: TCP/IP 监听端口。
  • server_time_usec: 基于纪元的系统时间,精度为微秒(microsecond)。
  • uptime_in_seconds: 自 Redis 服务器启动以来的秒数。
  • uptime_in_days: 自 Redis 服务器启动以来,以天为单位表示的相同值。
  • hz: 服务器的当前频率设置。
  • configured_hz: 服务器的配置频率设置。
  • lru_clock: 每分钟递增的时钟,用于 LRU 管理。
  • executable: 服务器可执行文件的路径。
  • config_file: 配置文件的路径。
  • io_threads_active: 指示 I/O 线程是否处于活动状态的标志。
  • listener0: 自 7.4.x 版本起,name=tcp,bind=,bind=-::,port=6379
  • shutdown_in_milliseconds: 在完成关机序列之前,从服务器同步复制的最大剩余时间。此字段仅在关机期间存在。

server example

# Server
redis_version:6.2.14
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:5d073c2412d25f13
redis_mode:standalone
os:Linux 4.18.0-193.6.3.el8_2.x86_64 x86_64
arch_bits:64
monotonic_clock:POSIX clock_gettime
multiplexing_api:epoll
atomicvar_api:c11-builtin
gcc_version:8.5.0
process_id:1656949
process_supervised:no
run_id:9e60675409920e591bbae224929ccd63885352b0
tcp_port:6379
server_time_usec:1756658838720399
uptime_in_seconds:8757315
uptime_in_days:101
hz:10
configured_hz:10
lru_clock:11828374
executable:/home/app/redis/./bin/redis-server
config_file:/home/app/redis/redis.conf
io_threads_active:0

# @since: 7.4.x
listener0:name=tcp,bind=*,bind=-::*,port=6379

clients

以下是 clients 部分中所有字段的含义:

clients fields

  • connected_clients: 客户端连接数(不包括来自从服务器的连接)。
  • cluster_connections: 集群总线使用的套接字数的近似值。
  • maxclients: 配置指令的值。这是 connected_clientsconnected_slavescluster_connections 之和的上限。
  • client_recent_max_input_buffer: 当前客户端连接中最大的输入缓冲区。
  • client_recent_max_output_buffer: 当前客户端连接中最大的输出缓冲区。
  • blocked_clients: 处于阻塞调用等待状态的客户端数量。
  • tracking_clients: 正在被跟踪的客户端数量。
  • clients_in_timeout_table: 在客户端超时表中的客户端数量。
  • pubsub_clients: 处于 pubsub 模式的客户端数量。Redis 7.4 版本新增。
  • watching_clients: 处于 watching 模式的客户端数量。Redis 7.4 版本新增。
  • total_watched_keys:被监视的键的数量。Redis 7.4 版本新增。
  • total_blocking_keys: 阻塞键的数量。Redis 7.2 版本新增。
  • total_blocking_keys_on_nokey: 一个或多个客户端希望在键被删除时被解除阻塞的阻塞键数量。Redis 7.2 版本新增。

clients example

# Clients
connected_clients:1
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:20480
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0

# @since 7.x
pubsub_clients:0
watching_clients:0
total_watched_keys:0
total_blocking_keys:0
total_blocking_keys_on_nokey:0

memory

以下是 memory 部分中所有字段的含义:

memory fields

  • used_memory: Redis 使用其分配器(标准 libcjemalloctcmalloc 等替代分配器)分配的总字节数。
  • used_memory_human: 上一个值的可读表示形式。
  • used_memory_rss: Redis 分配的、由操作系统看到的字节数(即驻留集大小)。这是 top(1)ps(1) 等工具报告的数字。
  • used_memory_rss_human: 上一个值的可读表示形式。
  • used_memory_peak: Redis 消耗的峰值内存(以字节为单位)。
  • used_memory_peak_human: 上一个值的可读表示形式。
  • used_memory_peak_perc: used_memoryused_memory_peak 的百分比。
  • used_memory_overhead: 服务器为其内部数据结构管理分配的所有开销的总和(以字节为单位)。
  • used_memory_startup: Redis 启动时消耗的初始内存量(以字节为单位)。
  • used_memory_dataset: 数据集的大小(字节)(used_memory 减去 used_memory_overhead)。
  • used_memory_dataset_perc: used_memory_dataset 占净内存使用量(used_memory 减去 used_memory_startup)的百分比。
  • total_system_memory: Redis 主机拥有的总内存量。
  • total_system_memory_human: 上一个值的可读表示形式。
  • used_memory_lua: Lua 引擎用于 EVAL 脚本的字节数。Redis 7.0 版本已弃用,重命名为 used_memory_vm_eval。
  • used_memory_vm_eval: 脚本 VM 引擎用于 EVAL 框架的字节数(不计入 used_memory)。Redis 7.0 版本新增。
  • used_memory_lua_human: 上一个值的可读表示形式。Redis 7.0 版本已弃用。
  • used_memory_scripts_eval: EVAL 脚本的开销字节数(计入 used_memory)。Redis 7.0 版本新增。
  • number_of_cached_scripts: 服务器缓存的 EVAL 脚本数量。Redis 7.0 版本新增。
  • number_of_functions: 函数数量。Redis 7.0 版本新增。
  • number_of_libraries: 库的数量。Redis 7.0 版本新增。
  • used_memory_vm_functions: 脚本 VM 引擎用于 Functions 框架的字节数(不计入 used_memory)。Redis 7.0 版本新增。
  • used_memory_vm_total: used_memory_vm_eval + used_memory_vm_functions (不计入 used_memory)。Redis 7.0 版本新增。
  • used_memory_vm_total_human: 上一个值的可读表示形式。
  • used_memory_functions: Function 脚本的开销字节数(计入 used_memory)。Redis 7.0 版本新增。
  • used_memory_scripts: used_memory_scripts_eval + used_memory_functions(计入 used_memory)。Redis 7.0 版本新增。
  • used_memory_scripts_human: 上一个值的可读表示形式。
  • maxmemory: maxmemory 配置指令的值。
  • maxmemory_human: 上一个值的可读表示形式。
  • maxmemory_policy: maxmemory-policy 配置指令的值。
  • mem_fragmentation_ratio: used_memory_rssused_memory 之间的比率。

    Note: 这不仅包括碎片化,还包括其他进程开销(参见 allocator_* 指标),以及代码、共享库、堆栈等开销。

  • mem_fragmentation_bytes: used_memory_rssused_memory 之间的差值。

    Note: 当总碎片化字节数较低(几兆字节)时,高比率(例如 1.5 及以上)并不表示存在问题。

  • allocator_frag_ratio:: allocator_activeallocator_allocated 之间的比率。这是真正的(外部)碎片化指标(而非 mem_fragmentation_ratio)。

  • allocator_frag_bytes: allocator_activeallocator_allocated 之间的差值。参见 mem_fragmentation_bytes 的注释。
  • allocator_rss_ratio: allocator_residentallocator_active 之间的比率。这通常表示分配器可以并且可能很快就会释放回操作系统的页面。
  • allocator_rss_bytes: allocator_residentallocator_active 之间的差值。
  • rss_overhead_ratio: used_memory_rss(进程 RSS)与 allocator_resident 之间的比率。这包括与分配器或堆无关的 RSS 开销。
  • rss_overhead_bytes: used_memory_rss(进程 RSS)与 allocator_resident 之间的差值。
  • allocator_allocated: 从分配器分配的总字节数,包括内部碎片化。通常与 used_memory 相同。
  • allocator_active: 分配器活动页面中的总字节数,包括外部碎片化。
  • allocator_resident: 分配器中驻留(RSS)的总字节数,包括可以释放回操作系统(通过 [MEMORY PURGE] 或只是等待)的页面。
  • allocator_muzzy: 分配器中“模糊”内存(RSS)的总字节数。“模糊”内存是已释放但尚未完全返回给操作系统的内存。当需要时可以立即重用,或在系统压力增加时被操作系统回收。
  • mem_not_counted_for_evict: 用于键驱逐的未计入内存。这基本上是临时的从服务器和 AOF 缓冲区。
  • mem_clients_slaves: 从服务器客户端使用的内存 - 从 Redis 7.0 开始,从服务器缓冲区与复制积压缓冲区共享内存,因此当从服务器不触发内存使用增加时,此字段可能显示为 0。
  • mem_clients_normal: 普通客户端使用的内存。
  • mem_cluster_links: 启用集群模式时,用于集群总线对等链接的内存。
  • mem_aof_buffer: 用于 AOF 和 AOF 重写缓冲区的临时内存。
  • mem_replication_backlog: 复制积压缓冲区使用的内存。
  • mem_total_replication_buffers: 复制缓冲区消耗的总内存 - Redis 7.0 版本新增。
  • mem_allocator: 内存分配器,在编译时选择。
  • mem_overhead_db_hashtable_rehashing: 当前正在重新哈希的数据库字典的临时内存开销 - 7.4 版本新增。
  • active_defrag_running: 当 activedefrag 启用时,此指示碎片整理是否当前处于活动状态,以及其打算利用的 CPU 百分比。
  • lazyfree_pending_objects: 等待释放的对象数量(由于调用 [UNLINK] 和带 ASYNC 选项的 [FLUSHALL])。
  • lazyfreed_objects: 已延迟释放的对象数量。

memory additional notes

理想情况下,used_memory_rss 的值应仅略高于 used_memory

  • rss >> used 时,较大的差异可能意味着存在(外部)内存碎片化,可以通过检查 allocator_frag_ratio allocator_frag_bytes 来评估。
  • used >> rss 时,这意味着 Redis 内存的一部分已被操作系统交换出去:预计会出现一些显著的延迟。

由于 Redis 无法控制其分配如何映射到内存页,高的 used_memory_rss 通常是内存使用量激增的结果。

当 Redis 释放内存时,内存会返还给分配器,而分配器可能会也可能不会将内存返还给系统。used_memory 值与操作系统报告的内存消耗之间可能存在差异。这可能是由于 Redis 已使用并释放了内存,但未返还给系统。used_memory_peak 值通常有助于检查这一点。

可以通过参考 [MEMORY STATS] 命令和 [MEMORY DOCTOR] 命令来获取有关服务器内存的更多自省信息。

memory example

# redis 7.4.2
# Memory
used_memory:1011968
used_memory_human:988.25K
used_memory_rss:3575808
used_memory_rss_human:3.41M
used_memory_peak:1011968
used_memory_peak_human:988.25K
used_memory_peak_perc:100.23%
used_memory_overhead:984256
used_memory_startup:946296
used_memory_dataset:27712
used_memory_dataset_perc:42.20%
allocator_allocated:1514560
allocator_active:1863680
allocator_resident:4702208
allocator_muzzy:0
total_system_memory:3873468416
total_system_memory_human:3.61G
used_memory_lua:31744
used_memory_vm_eval:31744
used_memory_lua_human:31.00K
used_memory_scripts_eval:0
number_of_cached_scripts:0
number_of_functions:0
number_of_libraries:0
used_memory_vm_functions:32768
used_memory_vm_total:64512
used_memory_vm_total_human:63.00K
used_memory_functions:192
used_memory_scripts:192
used_memory_scripts_human:192B
maxmemory:1073741824
maxmemory_human:1.00G
maxmemory_policy:allkeys-lru
allocator_frag_ratio:1.26
allocator_frag_bytes:273088
allocator_rss_ratio:2.52
allocator_rss_bytes:2838528
rss_overhead_ratio:0.76
rss_overhead_bytes:-1126400
mem_fragmentation_ratio:3.54
mem_fragmentation_bytes:2566256
mem_not_counted_for_evict:8
mem_replication_backlog:0
mem_total_replication_buffers:0
mem_clients_slaves:0
mem_clients_normal:37760
mem_cluster_links:0
mem_aof_buffer:8
mem_allocator:jemalloc-5.3.0
mem_overhead_db_hashtable_rehashing:0
active_defrag_running:0
lazyfree_pending_objects:0
lazyfreed_objects:0

persistence

以下是 persistence 部分中所有字段的含义:

persistence fields

  • loading: 指示是否正在进行转储文件加载的标志。
  • async_loading: 当前正在异步加载复制数据集,同时提供旧数据。这意味着 repl-diskless-load 已启用并设置为 swapdb。Redis 7.0 版本新增。
  • current_cow_peak: 子进程 fork 运行时写时复制内存的峰值大小(以字节为单位)。
  • current_cow_size: 子进程 fork 运行时写时复制内存的大小(以字节为单位)。
  • current_cow_size_age: current_cow_size 值的年龄(以秒为单位)。
  • current_fork_perc: 当前 fork 进程的进度百分比。对于 AOFRDB fork,它是current_save_keys_processedcurrent_save_keys_total 的百分比。
  • current_save_keys_processed: 当前保存操作处理的键数。
  • current_save_keys_total: 当前保存操作开始时的键数。
  • rdb_changes_since_last_save: 自上次转储以来的更改次数。
  • rdb_bgsave_in_progress: 指示正在进行 RDB 保存的标志。
  • rdb_last_save_time: 上次成功 RDB 保存的基于纪元的时间戳。
  • rdb_last_bgsave_status: 上次 RDB 保存操作的状态。
  • rdb_last_bgsave_time_sec: 上次 RDB 保存操作的持续时间(以秒为单位)。
  • rdb_current_bgsave_time_sec: 如果正在进行,正在进行的 RDB 保存操作的持续时间。
  • rdb_last_cow_size: 上次 RDB 保存操作期间写时复制内存的大小(以字节为单位)。
  • rdb_last_load_keys_expired: 上次 RDB 加载期间删除的易失性键数量。Redis 7.0 版本新增。
  • rdb_last_load_keys_loaded: 上次 RDB 加载期间加载的键数量。Redis 7.0 版本新增。
  • aof_enabled: 指示 AOF 日志记录已激活的标志。
  • aof_rewrite_in_progress: 指示正在进行 AOF 重写操作的标志。
  • aof_rewrite_scheduled: 指示一旦正在进行的 RDB 保存完成,将安排 AOF 重写操作的标志。
  • aof_last_rewrite_time_sec: 上次 AOF 重写操作的持续时间(以秒为单位)。
  • aof_current_rewrite_time_sec: 如果正在进行,正在进行的 AOF 重写操作的持续时间。
  • aof_last_bgrewrite_status: 上次 AOF 重写操作的状态。
  • aof_last_write_status: 上次写入 AOF 的状态。
  • aof_last_cow_size: 上次 AOF 重写操作期间写时复制内存的大小(以字节为单位)。
  • module_fork_in_progress: 指示正在进行模块 fork 的标志。
  • module_fork_last_cow_size: 上次模块 fork 操作期间写时复制内存的大小(以字节为单位)。
  • aof_rewrites: 自启动以来执行的 AOF 重写次数。
  • rdb_saves: 自启动以来执行的 RDB 快照次数。

persistence additional notes

rdb_changes_since_last_save 指的是自上次调用 [SAVE][BGSAVE] 以来,在数据集中产生某种更改的操作次数。

如果启用了 AOF,将添加以下附加字段:

  • aof_current_size: AOF 当前文件大小。
  • aof_base_size: 上次启动或重写时的 AOF 文件大小。
  • aof_pending_rewrite: 指示一旦正在进行的 RDB 保存完成,将安排 AOF 重写操作的标志。
  • aof_buffer_length: AOF 缓冲区的大小(AOF buffer)。
  • aof_rewrite_buffer_length:AOF 重写缓冲区(AOF rewrite buffer)的大小。注意:此字段在 Redis 7.0 中已移除。
  • aof_pending_bio_fsync: 后台 I/O 队列中等待的 fsync 作业数量
  • aof_delayed_fsync: 延迟的 fsync 计数器

如果正在进行加载操作(load operation),将添加以下附加字段:

  • loading_start_time: 加载操作开始的基于纪元的时间戳。
  • loading_total_bytes: 总文件大小。
  • loading_rdb_used_mem: 生成 RDB 文件的服务器在文件创建时的内存使用量。
  • loading_loaded_bytes: 已加载的字节数。
  • loading_loaded_perc: 以百分比表示的相同值。
  • loading_eta_seconds: ETA,加载完成的预计剩余时间(以秒为单位)。

persistence example

# redis 7.4.2
# Persistence
loading:0
async_loading:0
current_cow_peak:0
current_cow_size:0
current_cow_size_age:0
current_fork_perc:0.00
current_save_keys_processed:0
current_save_keys_total:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1742663640
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_saves:0
rdb_last_cow_size:0
rdb_last_load_keys_expired:0
rdb_last_load_keys_loaded:0
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
aof_rewrites:0
aof_rewrites_consecutive_failures:0
aof_last_write_status:ok
aof_last_cow_size:0
module_fork_in_progress:0
module_fork_last_cow_size:0
aof_current_size:0
aof_base_size:0
aof_pending_rewrite:0
aof_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0

threads

@Since: 8.0.x

threads 部分提供有关 I/O 线程的统计信息。

统计信息包括分配的客户端数量、处理的读取事件数量和处理的写入事件数量。Redis 8.0 版本新增。

对于每个 I/O 线程,将添加以下行:

  • io_thread_XXX: clients=XXX,reads=XXX,writes=XXX

stats

以下是 stats 部分中所有字段的含义:

stats fields

  • total_connections_received: 服务器接受的连接总数。
  • total_commands_processed: 服务器处理的命令总数。
  • instantaneous_ops_per_sec: 每秒处理的命令数。
  • total_net_input_bytes: 从网络读取的总字节数。
  • total_net_output_bytes: T写入网络的总字节数。
  • total_net_repl_input_bytes: 为复制目的从网络读取的总字节数。
  • total_net_repl_output_bytes: 为复制目的写入网络的总字节数。
  • instantaneous_input_kbps: 网络每秒读取速率(KB/sec)。
  • instantaneous_output_kbps: 网络每秒写入速率(KB/sec)。
  • instantaneous_input_repl_kbps: 为复制目的(replication purposes),网络每秒读取速率(KB/sec)。
  • instantaneous_output_repl_kbps: 为复制目的(replication purposes),网络每秒写入速率(KB/sec)。
  • rejected_connections: 因 maxclients 限制而被拒绝的连接数。
  • sync_full: 与从服务器的完全重新同步次数。
  • sync_partial_ok: 接受的部分重新同步请求次数。
  • sync_partial_err: 拒绝的部分重新同步请求次数。
  • expired_subkeys: 哈希字段过期事件的数量。
  • expired_keys: 键过期事件总数。
  • expired_stale_perc: 可能已过期的键的百分比。
  • expired_time_cap_reached_count: 主动过期周期提前停止的次数。
  • expire_cycle_cpu_milliseconds: 在主动过期周期上花费的累计时间。
  • evicted_keys: 由于 maxmemory 限制而被驱逐的键数。
  • evicted_clients: 由于 maxmemory-clients 限制而被驱逐的客户端数。Redis 7.0 版本新增。
  • evicted_scripts: 由于 LRU 策略而被驱逐的 EVAL 脚本数,更多细节参见 [EVAL]。Redis 7.4 版本新增。
  • total_eviction_exceeded_time: 自服务器启动以来,used_memory 大于 maxmemory 的总时间(以毫秒为单位)。
  • current_eviction_exceeded_time: 自 used_memory 上次超过 maxmemory 以来经过的时间(以毫秒为单位)。
  • keyspace_hits: 在主字典中成功查找键的次数。
  • keyspace_misses: 在主字典中查找键失败的次数。
  • pubsub_channels: 具有客户端订阅的 pub/sub 频道的全局数量。
  • pubsub_patterns: 具有客户端订阅的 pub/sub 模式的全局数量。
  • pubsubshard_channels: 具有客户端订阅的 pub/sub 分片频道的全局数量。Redis 7.0.3 版本新增。
  • latest_fork_usec: 最近一次 fork 操作的持续时间(以微秒为单位)。
  • total_forks: 自服务器启动以来的 fork 操作总数。
  • migrate_cached_sockets: 为 [MIGRATE] 目的打开的套接字数量。
  • slave_expires_tracked_keys: 为过期目的而跟踪的键数量(仅适用于可写从服务器)。
  • active_defrag_hits: 主动碎片整理过程执行的值重新分配次数。
  • active_defrag_misses: 主动碎片整理过程启动但中止的值重新分配次数。
  • active_defrag_key_hits: 被主动碎片整理的键数量。
  • active_defrag_key_misses: 被主动碎片整理过程跳过的键数量。
  • total_active_defrag_time: 内存碎片化超过限制的总时间(以毫秒为单位)。
  • current_active_defrag_time: 自内存碎片化上次超过限制以来经过的时间(以毫秒为单位)。
  • tracking_total_keys: 服务器正在跟踪的键数量。
  • tracking_total_items: 正在跟踪的项目数量,即每个键的客户端数量之和。
  • tracking_total_prefixes: 服务器前缀表中跟踪的前缀数量(仅适用于广播模式)。
  • unexpected_error_replies: 意外错误回复的数量,即来自 AOF 加载或复制的错误类型。
  • total_error_replies: 发出的错误回复总数,即被拒绝的命令(命令执行前的错误)和失败的命令(命令执行中的错误)之和。
  • dump_payload_sanitizations: 转储有效负载深度完整性验证的总次数(参见 sanitize-dump-payload 配置)。
  • total_reads_processed: 处理的读取事件总数。
  • total_writes_processed: 处理的写入事件总数。
  • io_threaded_reads_processed: I/O 线程处理的读取事件数量。
  • io_threaded_writes_processed: I/O 线程处理的写入事件数量。
  • client_query_buffer_limit_disconnections: 由于客户端达到查询缓冲区限制而导致的断开连接总数。
  • client_output_buffer_limit_disconnections: 由于客户端达到输出缓冲区限制而导致的断开连接总数。
  • reply_buffer_shrinks: 输出缓冲区收缩的总次数。
  • reply_buffer_expands: 输出缓冲区扩展的总次数。
  • eventloop_cycles: 事件循环周期的总数。
  • eventloop_duration_sum: 在事件循环中花费的总时间(以微秒为单位)(包括 I/O 和命令处理)。
  • eventloop_duration_cmd_sum: 在命令执行上花费的总时间(以微秒为单位)。
  • instantaneous_eventloop_cycles_per_sec: 每秒事件循环周期数。
  • instantaneous_eventloop_duration_usec: 单个事件循环周期中花费的平均时间(以微秒为单位)。
  • acl_access_denied_auth: 认证失败次数。
  • acl_access_denied_cmd: 由于访问被拒绝到命令而被拒绝的命令数。
  • acl_access_denied_key: 由于访问被拒绝到键而被拒绝的命令数。
  • acl_access_denied_channel: 由于访问被拒绝到频道而被拒绝的命令数。

stats example

# 7.4.2
# Stats
total_connections_received:12
total_commands_processed:1
instantaneous_ops_per_sec:0
total_net_input_bytes:120
total_net_output_bytes:379
total_net_repl_input_bytes:0
total_net_repl_output_bytes:0
instantaneous_input_kbps:0.01
instantaneous_output_kbps:0.00
instantaneous_input_repl_kbps:0.00
instantaneous_output_repl_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_subkeys:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
expire_cycle_cpu_milliseconds:243605
evicted_keys:0
evicted_clients:0
evicted_scripts:0
total_eviction_exceeded_time:0
current_eviction_exceeded_time:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
pubsubshard_channels:0
latest_fork_usec:0
total_forks:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
total_active_defrag_time:0
current_active_defrag_time:0
tracking_total_keys:0
tracking_total_items:0
tracking_total_prefixes:0
unexpected_error_replies:0
total_error_replies:11
dump_payload_sanitizations:0
total_reads_processed:24
total_writes_processed:12
io_threaded_reads_processed:0
io_threaded_writes_processed:0
client_query_buffer_limit_disconnections:0
client_output_buffer_limit_disconnections:0
reply_buffer_shrinks:0
reply_buffer_expands:0
eventloop_cycles:139457671
eventloop_duration_sum:29160864237
eventloop_duration_cmd_sum:28
instantaneous_eventloop_cycles_per_sec:9
instantaneous_eventloop_duration_usec:206
acl_access_denied_auth:0
acl_access_denied_cmd:0
acl_access_denied_key:0
acl_access_denied_channel:0

replication

以下是 replication 部分中所有字段的含义:

replication fields

  • role: 如果实例没有主服务器,则值为 "master"(主服务器),如果实例是某个主服务器的从服务器,则值为 "slave"(从服务器)。

    Note: 从服务器可以是另一个从服务器的主服务器(链式复制)。

  • master_failover_state: 正在进行的故障转移的状态(如果有)。

  • master_replid: Redis 服务器的复制 ID。
  • master_replid2: 辅助复制 ID,用于故障转移后的 PSYNC
  • master_repl_offset: 服务器的当前复制偏移量。
  • second_repl_offset: 接受复制 ID 的偏移量。
  • repl_backlog_active: 指示复制积压缓冲区是否处于活动状态的标志。
  • repl_backlog_size: 复制积压缓冲区的总大小(以字节为单位)。
  • repl_backlog_first_byte_offset: 复制积压缓冲区的主服务器偏移量。
  • repl_backlog_histlen: 复制积压缓冲区中数据的大小(以字节为单位)。

如果实例是从服务器,则提供以下附加字段:

  • master_host: 主服务器的主机名或 IP 地址。
  • master_port: 主服务器监听的 TCP 端口。
  • master_link_status: 链接的状态(up/down)。
  • master_last_io_seconds_ago: 自上次与主服务器交互以来的秒数。
  • master_sync_in_progress: 指示主服务器正在同步到从服务器。
  • slave_read_repl_offset: 从服务器实例的读取复制偏移量。
  • slave_repl_offset: 从服务器实例的复制偏移量。
  • slave_priority: 作为故障转移候选的实例优先级。
  • slave_read_only: 指示从服务器是否为只读的标志。
  • replica_announced: 指示从服务器是否由 Sentinel 宣布的标志。

如果正在进行 SYNC 操作,则提供以下附加字段:

  • master_sync_total_bytes: 需要传输的总字节数。当大小未知时(例如,当使用 repl-diskless-sync 配置指令时),此值可能为 0。
  • master_sync_read_bytes: 已传输的字节数。
  • master_sync_left_bytes: 在同步完成前剩余的字节数(当 master_sync_total_bytes 为 0 时,此值可能为负)。
  • master_sync_perc: master_sync_read_bytesmaster_sync_total_bytes 的百分比,或者当 master_sync_total_bytes 为 0 时,使用 loading_rdb_used_mem 的近似值。
  • master_sync_last_io_seconds_ago: 在 SYNC 操作期间,自上次传输 I/O 以来的秒数。

如果主服务器和从服务器之间的链接断开,则提供一个附加字段:

  • master_link_down_since_seconds: 链接断开以来的秒数。

以下字段始终提供:

  • connected_slaves: 连接的从服务器数量。

如果服务器配置了 min-slaves-to-write(或从 Redis 5 开始配置了 min-replicas-to-write)指令,则提供一个附加字段:

  • min_slaves_good_slaves: 当前被认为是良好的从服务器数量。

对于每个从服务器,将添加以下行:

  • slaveXXX: id, IP address, port, state, offset, lag

replication example

# 7.4.2
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:f005a96c65f06fcefc77b4854aaf43090a002765
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

cpu

以下是 cpu 部分中所有字段的含义:

cpu fields

  • used_cpu_sys: Redis 服务器消耗的系统 CPU,即服务器进程所有线程(主线程和后台线程)消耗的系统 CPU 之和。
  • used_cpu_user: Redis 服务器消耗的用户 CPU,即服务器进程所有线程(主线程和后台线程)消耗的用户 CPU 之和。
  • used_cpu_sys_children: 后台进程消耗的系统 CPU。
  • used_cpu_user_children: 后台进程消耗的用户 CPU。
  • used_cpu_sys_main_thread: Redis 服务器主线程消耗的系统 CPU。
  • used_cpu_user_main_thread: Redis 服务器主线程消耗的用户 CPU。

cpu example

# CPU
used_cpu_sys:4752.915327
used_cpu_user:26024.813495
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000
used_cpu_sys_main_thread:4752.915159
used_cpu_user_main_thread:26024.811598

commandstats

commandstats 部分提供基于命令类型的统计信息,包括到达命令执行的调用次数(未被拒绝)、这些命令消耗的总 CPU 时间、每次命令执行的平均 CPU 消耗、被拒绝的调用次数(命令执行前的错误)以及失败的调用次数(命令执行中的错误)。

对于每种命令类型,将添加以下行:

  • cmdstat_XXX: calls=XXX,usec=XXX,usec_per_call=XXX,rejected_calls=XXX,failed_calls=XXX

latencystats

latencystats 部分提供基于命令类型的延迟百分位分布统计信息。

默认情况下,导出的延迟百分位是 p50p99p999

如果需要更改导出的百分位,请使用 CONFIG SET latency-tracking-info-percentiles "50.0 99.0 99.9"

此部分需要启用扩展延迟监控功能(默认情况下已启用)。

如果需要启用,请使用 CONFIG SET latency-tracking yes

对于每种命令类型,将添加以下行:

  • latency_percentiles_usec_XXX: p<percentile 1>=<percentile 1 value>,p<percentile 2>=<percentile 2 value>,...

errorstats

errorstats 部分允许跟踪 Redis 内部发生的不同错误,基于回复错误前缀(“-”之后的第一个单词,直到第一个空格。例如:ERR)。

对于每种错误类型,将添加以下行:

  • errorstat_XXX: count=XXX

如果服务器检测到此部分被过多的错误淹没,它将被禁用,显示单个 ERRORSTATS_DISABLED 错误,并将错误打印到服务器日志中。

这可以通过 CONFIG RESETSTAT 重置。

sentinel

sentinel 部分仅在 Redis Sentinel 实例中可用。它包含以下字段:

  • sentinel_masters: 此 Sentinel 实例监控的 Redis 主服务器数量。
  • sentinel_tilt: 值为 1 表示此哨兵处于 TILT 模式。
  • sentinel_tilt_since_seconds: 当前 TILT 的持续时间(以秒为单位),如果没有处于 TILT 模式则为 -1。Redis 7.0.0 版本新增。
  • sentinel_total_tilt: 自运行以来,此哨兵处于 TILT 模式的次数。
  • sentinel_running_scripts: 此哨兵当前正在执行的脚本数量。
  • sentinel_scripts_queue_length: 等待执行的用户脚本队列的长度。
  • sentinel_simulate_failure_flags: SENTINEL SIMULATE-FAILURE 命令的标志。

cluster

cluster 部分目前仅包含一个唯一字段:

  • cluster_enabled: 指示 Redis 集群已启用。

modules

modules 部分包含已加载模块的附加信息(如果模块提供)。此部分中属性行的字段部分始终以模块的名称为前缀。

Redis Query Engine fields

  • search_gc_bytes_collected: 垃圾回收器从分片内存中的索引中释放的总内存量(以字节为单位)。
  • search_bytes_collected: 垃圾回收器从分片内存中的索引中释放的总内存量(以字节为单位)。8.0 版本已弃用(重命名为 search_gc_bytes_collected),但在旧版本中仍然可用。
  • search_gc_marked_deleted_vectors: 在向量索引中标记为已删除但尚未清理的向量数量。
  • search_marked_deleted_vectors: 在向量索引中标记为已删除但尚未清理的向量数量。8.0 版本已弃用(重命名为 search_gc_marked_delete_vectors),但在旧版本中仍然可用。
  • search_gc_total_cycles: 执行的垃圾回收周期总数。
  • search_total_cycles: 执行的垃圾回收周期总数。8.0 版本已弃用(重命名为 search_gc_total_cycles),但在旧版本中仍然可用。
  • search_gc_total_docs_not_collected_by_gc: 标记为已删除但其内存尚未被垃圾回收器释放的文档数量。
  • search_total_docs_not_collected_by_gc: 标记为已删除但其内存尚未被垃圾回收器释放的文档数量。8.0 版本已弃用(重命名为 search_gc_total_docs_not_collected),但在旧版本中仍然可用。
  • search_gc_total_ms_run: 分片中所有垃圾回收周期的总持续时间(以毫秒为单位)。
  • search_total_ms_run: 分片中所有垃圾回收周期的总持续时间(以毫秒为单位)。8.0 版本已弃用(重命名为 search_gc_total_ms_run),但在旧版本中仍然可用。
  • search_cursors_internal_idle: 当前在分片中持有待处理结果的协调器游标总数。
  • search_cursors_user_idle: 当前在分片中持有待处理结果的、由用户显式请求的游标总数。
  • search_global_idle: 当前在分片中持有待处理结果的用户和内部游标总数。8.0 版本已弃用(拆分为 search_cursors_internal_idlesearch_cursors_user_idle),但在旧版本中仍然可用。
  • search_cursors_internal_active: 分片中的协调器游标总数,无论是持有待处理结果还是正在执行 FT.CURSOR READ
  • search_cursors_user_active: 分片中的用户游标总数,无论是持有待处理结果还是正在执行 FT.CURSOR READ
  • search_global_total: 分片中的用户和内部游标总数,无论是持有待处理结果还是正在执行 FT.CURSOR READ。8.0 版本已弃用(拆分为 search_cursors_internal_activesearch_cursors_user_active),但在旧版本中仍然可用。
  • search_number_of_indexes: 分片中的索引总数。
  • search_number_of_active_indexes: 正在运行后台索引和/或后台查询处理操作的索引总数。后台索引指的是向量摄入过程或正在进行的后台索引器。
  • search_number_of_active_indexes_running_queries: 当前正在运行后台查询过程的索引总数。
  • search_number_of_active_indexes_indexing: 当前正在进行后台索引过程的索引总数。后台索引指的是向量摄入过程或正在进行的后台索引器。此指标受为写入操作分配的 WORKER 线程数量和索引数量的限制。
  • search_total_active_write_threads: 分片中当前正在运行的后台写入(索引)进程总数。后台索引指的是向量摄入过程或正在进行的后台索引器。此指标受为写入操作分配的线程数量的限制。
  • search_fields_text_Text: 分片中所有索引的 TEXT 字段总数。
  • search_fields_text_Sortable: 分片中所有索引的 SORTABLE TEXT 字段总数。仅当其值大于 0 时才出现。
  • search_fields_text_NoIndex: 分片中所有索引的 NOINDEX TEXT 字段总数,这些字段仅用于排序但未被索引。仅当其值大于 0 时才出现。
  • search_fields_numeric_Numeric: 分片中所有索引的 NUMERIC 字段总数。
  • search_fields_numeric_Sortable: 分片中所有索引的 SORTABLE NUMERIC 字段总数。仅当其值大于 0 时才出现。
  • search_fields_numeric_NoIndex: 分片中所有索引的 NOINDEX NUMERIC 字段总数;即仅用于排序但未被索引。仅当其值大于 0 时才出现。
  • search_fields_tag_Tag: 分片中所有索引的 TAG 字段总数。
  • search_fields_tag_Sortable: 分片中所有索引的 SORTABLE TAG 字段总数。仅当其值大于 0 时才出现。
  • search_fields_tag_NoIndex: 分片中所有索引的 NOINDEX TAG 字段总数;即仅用于排序但未被索引。仅当其值大于 0 时才出现。
  • search_fields_tag_CaseSensitive: 分片中所有索引的 CASESENSITIVE TAG 字段总数。仅当其值大于 0 时才出现。

  • search_fields_geo_Geo: 分片中所有索引的 GEO 字段总数。

  • search_fields_geo_Sortable: 分片中所有索引的 SORTABLE GEO 字段总数。仅当其值大于 0 时才出现。
  • search_fields_geo_NoIndex: 分片中所有索引的 NOINDEX GEO 字段总数;即仅用于排序但未被索引。仅当其值大于 0 时才出现。
  • search_fields_vector_Vector: 分片中所有索引的 VECTOR 字段总数。
  • search_fields_vector_Flat: 分片中所有索引的 FLAT VECTOR 字段总数。
  • search_fields_vector_HNSW: 分片中所有索引的 HNSW VECTOR 字段总数。
  • search_fields_geoshape_Geoshape: 分片中所有索引的 GEOSHAPE 字段总数。
  • search_fields_geoshape_Sortable: 分片中所有索引的 SORTABLE GEOSHAPE 字段总数。仅当其值大于 0 时才出现。
  • search_fields_geoshape_NoIndex: 分片中所有索引的 NOINDEX GEOSHAPE 字段总数;即仅用于排序但未被索引。仅当其值大于 0 时才出现。
  • search_fields_<field>_IndexErrors: 尝试索引包含 <field> 字段的文档导致的索引失败总数。
  • search_used_memory_indexes: 分片中所有索引分配的总内存(以字节为单位)。
  • search_used_memory_indexes_human: 分片中所有索引分配的总内存(以 MB 为单位)。
  • search_smallest_memory_index: 分片中内存使用最少的索引的内存使用量(以字节为单位)。
  • search_smallest_memory_index_human: 分片中内存使用最少的索引的内存使用量(以 MB 为单位)。
  • search_largest_memory_index: 分片中内存使用最多的索引的内存使用量(以字节为单位)。
  • search_largest_memory_index_human: 分片中内存使用最多的索引的内存使用量(以 MB 为单位)。
  • search_total_indexing_time: 在索引操作上花费的总时间,不包括 HNSW 图中向量的后台索引。
  • search_used_memory_vector_index: 分片中所有向量索引的总内存使用量。
  • search_bytes_collected: 垃圾回收器从分片内存中的索引释放的总内存量(以字节为单位)。
  • search_total_cycles: 执行的垃圾回收周期总数。
  • search_total_ms_run: 分片中所有垃圾回收周期的总持续时间(以毫秒为单位)。
  • search_total_docs_not_collected_by_gc: 标记为已删除但其内存尚未被垃圾回收器释放的文档数量。
  • search_marked_deleted_vectors: 在向量索引中标记为已删除但尚未清理的向量数量。
  • search_total_queries_processed: 成功执行的查询总数(使用游标时,不计算从现有游标读取)在分片中。
  • search_total_query_commands: 成功执行的查询命令总数(包括 FT.SEARCHFT.AGGREGATEFT.CURSOR READ)。
  • search_total_query_execution_time_ms: 所有查询命令(包括 FT.SEARCHFT.AGGREGATEFT.CURSOR READ)的累计执行时间(以毫秒为单位)。
  • search_total_active_queries: 当前在分片中执行的后台查询总数,不包括 FT.CURSOR READ
  • search_errors_indexing_failures: 分片中所有索引记录的索引失败总数。
  • search_errors_for_index_with_max_failures: 失败次数最多的索引中的索引失败数量。

keyspace

keyspace 部分提供每个数据库主字典的统计信息。

统计信息包括键的数量和具有过期时间的键的数量。

对于每个数据库,将添加以下行:

  • dbXXX: keys=XXX,expires=XXX,avg_ttl=XXX,subexpiry=XXX

keysizes

keysizes 部分提供有关数据集中每种数据类型(字符串、列表、集合、哈希和有序集合)键大小分布的详细统计信息。分布使用以 2 为底的对数直方图进行跟踪。

以下是 Redis 双数据库实例的样本输出:

# Keysizes
db0_distrib_strings_sizes:2=1,4=1,8=1,16=1,32=1,64=1,128=1,256=1,512=1,1K=1,2K=1,4K=1,8K=1,16K=1,32K=1,64K=1,128K=1,256K=1,512K=1,1M=1
db0_distrib_lists_items:1=1,2=1,4=1,8=1,16=1,32=1,64=1,128=1,256=1,512=1,1K=1,2K=1,4K=1,8K=1,16K=1,32K=1,64K=1
db0_distrib_sets_items:1=1,2=1,4=1,8=1,16=1,32=1,64=1,128=1,256=1,512=1,1K=1,2K=1,4K=1,8K=1,16K=1,32K=1,64K=1
db0_distrib_zsets_items:1=1,2=1,4=1,8=1,16=1,32=1,64=1,128=1,256=1,512=1,1K=1,2K=1,4K=1,8K=1,16K=1,32K=1,64K=1
db0_distrib_hashes_items:1=1,2=1,4=1,8=1,16=1,32=1,64=1,128=1,256=1,512=1,1K=1,2K=1,4K=1,8K=1,16K=1,32K=1
db1_distrib_strings_sizes:2=1,4=1,8=1,16=1,32=1,64=1,128=1,256=1,512=1,1K=1,2K=1,4K=1,8K=1,16K=1,32K=1,64K=1,128K=1,256K=1,512K=1,1M=1
db1_distrib_lists_items:1=1,2=1,4=1,8=1,16=1,32=1,64=1,128=1,256=1,512=1,1K=1,2K=1,4K=1,8K=1,16K=1,32K=1,64K=1
db1_distrib_sets_items:1=1,2=1,4=1,8=1,16=1,32=1,64=1,128=1,256=1,512=1,1K=1,2K=1,4K=1,8K=1,16K=1,32K=1,64K=1
db1_distrib_zsets_items:1=1,2=1,4=1,8=1,16=1,32=1,64=1,128=1,256=1,512=1,1K=1,2K=1,4K=1,8K=1,16K=1,32K=1,64K=1
db1_distrib_hashes_items:1=1,2=1,4=1,8=1,16=1,32=1,64=1,128=1,256=1,512=1,1K=1,2K=1,4K=1,8K=1,16K=1,32K=1

debug

debug 部分包含实验性指标,这些指标在未来的版本中可能会被修改或移除。

当调用 INFOINFO ALL 时,该部分内容不会被包含,仅在使用 INFO DEBUG 时才会返回。

  • eventloop_duration_aof_sum: 事件循环中用于刷新 AOF 的总耗时(微秒)。
  • eventloop_duration_cron_sum: cron 任务的总耗时(微秒),包括 serverCron 和 beforeSleep,但不包括 I/O 和 AOF 刷盘。
  • eventloop_duration_max: 单次事件循环周期中的最大耗时(微秒)。
  • eventloop_cmd_per_cycle_max: 单次事件循环周期中处理命令的最大数量。
  • allocator_allocated_lua: 分配器为 Lua 专门分配的总字节数,包含内部碎片。
  • allocator_active_lua: 分配器中为 Lua 专门分配的活跃页面总字节数,包含外部碎片。
  • allocator_resident_lua: 分配器中为 Lua 专门占用的驻留内存(RSS)总字节数。这包括可以释放给操作系统的内存页(通过 MEMORY PURGE 或等待释放)。
  • allocator_frag_bytes_lua: allocator_active_luaallocator_allocated_lua 之间的差值(即碎片字节数)。

Additional notes

关于本文档中使用“slave”一词的说明:从 Redis 5 开始,除非出于向后兼容性的考虑,Redis 项目已不再使用“slave”(从属)一词。遗憾的是,在此命令中,“slave”是协议的一部分,因此只有当该 API 自然废弃时,我们才能彻底移除这些用法。

模块生成的部分:从 Redis 6 开始,模块可以将自身的信息注入到 INFO 命令中。这些信息默认情况下会被排除,即使提供了 all 参数(此时会列出已加载的模块,但不包含它们生成的信息字段)。要获取这些信息,必须使用 modules 参数或 everything 参数。