Redis 基础教程

Redis 命令

Redis 高级教程

Redis 笔记

Redis INFO 命令

Redis 服务器 Redis 服务器


Redis INFO 命令以一种易于理解和阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。

命令格式

INFO [section]

可用版本:>=1.0.0

时间复杂度:O(1)

命令参数

INFO 命令可以通过可选参数来指定返回的信息部分:

  • server:有关 Redis 服务器的常规信息。
  • clients:客户端的连接部分。
  • memory:内存消耗相关信息。
  • persistence:持久化信息,主要是 RDB 和 AOF 相关信息。
  • stats:一般统计信息。
  • replication:主从复制相关信息。
  • cpu:CPU 消耗相关信息。
  • commandstats:Redis 命令相关信息。
  • cluster:Redis 集群部分的相关信息。
  • keyspace:数据库相关的信息。

除此之外,也可以指定如下值:

  • all:返回所有的部分。
  • default:返回默认的部分。

如果未指定参数,则默认为 default。

服务器(server)部分

以下是服务器部分中所有字段的含义:

  • redis_version:Redis 服务器的版本。
  • redis_git_sha1:Redis SHA1。
  • redis_git_dirty:Redis GIT 脏数据标记。
  • redis_build_id:Redis 构建 id。
  • redis_mode:Redis 服务器模式(“单机模式-standalone”,“哨兵模式-sentinel”和“集群模式-cluster”)。
  • os:托管 Redis 服务器的操作系统。
  • arch_bits:架构(32位或64位)。
  • multiplexing_api:Redis 使用的事件循环机制。
  • atomicvar_api:Redis 使用的 Atomicvar API。
  • gcc_version:用于编译 Redis 服务器的 GCC 编译器的版本。
  • process_id:Redis 服务器进程的进程号(PID)。
  • run_id:用于标识 Redis 服务器的随机值(Redis 的哨兵模式和集群模式会使用这个随机值)。
  • tcp_port:TCP/IP 监听端口。
  • uptime_in_seconds:Redis 服务器启动后的秒数。
  • uptime_in_days:Redis服务器启动后的天数。
  • hz:服务器的频率设置。
  • lru_clock:每分钟都会递增的时钟,用于 LRU(Least Recently Used,最近最少使用)缓存管理。
  • executable:服务器可执行文件的路径。
  • config_file:配置文件的路径。

客户端(clients)部分

以下是客户端部分中所有字段的含义:

  • connected_clients:客户端连接数(不包括来自从库的连接)。
  • client_longest_output_list:当前客户端连接中最长的输出列表。
  • client_biggest_input_buf:当前客户端连接中最大的输入缓冲区。
  • blocked_clients:由于阻塞调用(BLPOP、BRPOP、BRPOPLPUSH)而等待的客户端的数量。

内存(memory)部分

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

  • used_memory:Redis 使用它的内存分配器(可以是标准的 libc、jemalloc 或 tcmalloc 分配器)分配的内存总量,以字节为单位。
  • used_memory_human:Redis 使用它的内存分配器分配的内存总量,显示为用户易于阅读的格式。
  • used_memory_rss:操作系统所看到的为 Redis 分配的内存总量(也被称为“驻留集大小(Resident Set Size)”)。这个内存总量是由诸如 top(1) 和 ps(1) 之类的工具报告的。
  • used_memory_rss_human:操作系统所看到的为 Redis 分配的内存总量,显示为用户易于阅读的格式。
  • used_memory_peak:Redis 消耗的内存峰值,以字节为单位。
  • used_memory_peak_human:Redis 消耗的内存峰值,显示为用户易于阅读的格式。
  • used_memory_peak_perc:used_memory_peak 超出 used_memory 的百分比。
  • used_memory_overhead:服务器为管理其内部数据结构而分配的所有开销的字节总和。
  • used_memory_startup:Redis 在启动时消耗的初始内存量(以字节为单位)。
  • used_memory_dataset:数据集的大小(以字节为单位)(used_memory_overhead 减去 used_memory)。
  • used_memory_dataset_perc:used_memory_dataset 净内存使用量的百分比(used_memory 减去 used_memory_startup)。
  • total_system_memory:系统内存总量,以字节为单位。
  • total_system_memory_human:系统内存总量,显示为用户易于阅读的格式。
  • used_memory_lua:Lua 脚本引擎使用的内存总量,以字节为单位。
  • used_memory_lua_human:Lua 脚本引擎使用的内存总量,显示为用户易于阅读的格式。
  • maxmemory:Redis 能够使用的最大内存上限(0 表示没有限制),以字节为单位。
  • maxmemory_human:Redis 能够使用的最大内存上限,显示为用户易于阅读的格式。
  • maxmemory_policy:Redis 使用的内存回收策略。
  • mem_fragmentation_ratio:used_memory_rss 和 used_memory 之间的比率。
  • mem_allocator:Redis 使用的内存分配器,在编译时选择指定。
  • active_defrag_running:指示碎片整理是否处于激活状态的标志。
  • lazyfree_pending_objects:是否存在延迟释放的挂起对象(如带有 ASYNC 选项的 UNLINKFLUSHDBFLUSHALL 等命令的返回结果)。

在理想情况下,used_memory_rss 的值只应当比 used_memory 的值稍微高一点。当常驻集内存(rss)远大于已使用内存(used)时,这就意味着 Redis 服务器存在较多的内存碎片(内部的或外部的),这种情况可以通过检查 mem_fragmentation_ratio 的值估计出来。当已使用内存(used)远大于常驻集内存(rss)时,这就意味着有一部分 Redis 使用的内存被操作系统换出至磁盘了:可以预料到会产生明显的延时。

因为,Redis 无法控制如何将它分配的内存映射至内存页面,当内存使用率飙升时,经常会导致较高的 used_memory_rss 值。

当 Redis 释放内存时,会将内存归还给分配器,然后分配器可能会(也可能不会)将内存归还给操作系统。used_memory 的值和操作系统报告的内存消耗值可能会有一些差异。这可能是由于 Redis 正在使用和释放内存,但是释放的内存尚未归还给操作系统而导致的。通常,可以通过 used_memory_peak 的值来检查 Redis 是否存在这种问题。

更多有关服务器内存的信息,可以参考 MEMORY STATSMEMORY DOCTOR 命令。

持久化(persistence)部分

以下是持久化部分中所有字段的含义:

  • loading:表示 Redis 是否正在加载一个转储文件的标志。
  • rdb_changes_since_last_save:从最近一次转储至今,RDB 的修改次数。
  • rdb_bgsave_in_progress:表示 Redis 是否正在保存 RDB。
  • rdb_last_save_time:最近一次成功保存 RDB 的时间戳,基于 Epoch 时间。
  • rdb_last_bgsave_status:最近一次 RDB 保存操作的状态。
  • rdb_last_bgsave_time_sec:最近一次 RDB 保存操作消耗的时间,以秒为单位。
  • rdb_current_bgsave_time_sec:如果 Redis 正在执行 RDB 保存操作,那么这个字段表示已经消耗的时间,以秒为单位。
  • rdb_last_cow_size:最近一次 RBD 保存操作期间复制写入时分配的字节大小。
  • aof_enabled:表示 Redis 是否启用 AOF 日志功能的标志。
  • aof_rewrite_in_progress:表示 Redis 是否正在执行一次 AOF 重写操作的标志。
  • aof_rewrite_scheduled:表示一旦 Redis 正在执行的 RDB 保存操作完成之后,是否就会调度执行 AOF 重写操作的标志。
  • aof_last_rewrite_time_sec:最近一次 AOF 重写操作消耗的时间,以秒为单位。
  • aof_current_rewrite_time_sec:如果 Redis 正在执行 AOF 重写操作,那么这个字段表示已经消耗的时间,以秒为单位。
  • aof_last_bgrewrite_status:最近一次 AOF 重写操作的状态。
  • aof_last_write_status:最后一次写入操作到 AOF 的状态。
  • aof_last_cow_size:最近一次 AOF 重写操作期间复制写入时分配的大小(以字节为单位)。

rdb_changes_since_last_save 字段表示自从调用 SAVE 命令或 BGSAVE 命令至今,Redis 已经执行了会对数据集造成某种修改的所有操作的总次数。

如果启用了 AOF 功能,那么 persistence 分段将会新增额外的字段,如下所示:

  • aof_current_size:AOF 文件当前的大小。
  • aof_base_size:最近一次启动或重写时的 AOF 文件的大小。
  • aof_pending_rewrite:表示一旦 Redis 正在执行的 RDB 保存操作完成之后,是否就会调度执行 AOF 重写操作的标志。
  • aof_buffer_length:AOF 缓冲区的大小。
  • aof_rewrite_buffer_length:AOF 重写缓冲区的大小。
  • aof_pending_bio_fsync:表示后台 I/O 队列中的 fsync 的暂停任务。
  • aof_delayed_fsync:被延迟的 fsync 调用的计数器。

如果 Redis 正在执行加载操作,那么 persistence 分段将会新增额外的字段,如下所示:

  • loading_start_time:开始执行加载转储文件操作的时间戳,基于 Epoch 时间。
  • loading_total_bytes:转储文件的总大小。
  • loading_loaded_bytes:已经加载的转储文件的大小,以字节为单位。
  • loading_loaded_perc:已经加载的转储文件的百分比。
  • loading_eta_seconds:预计完成加载转储文件需要消耗的时间,以秒为单位。

统计(stats)部分

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

  • total_connections_received:Redis 服务器接受的连接总数。
  • total_commands_processed:Redis 服务器处理的命令总数。
  • instantaneous_ops_per_sec:每秒钟处理的命令数量。
  • total_net_input_bytes:通过网络接收的数据总量,以字节为单位。
  • total_net_output_bytes:通过网络发送的数据总量,以字节为单位。
  • instantaneous_input_kbps:每秒钟接收数据的速率,以 kbps 为单位。
  • instantaneous_output_kbps:每秒钟发送数据的速率,以 kbps 为单位。
  • rejected_connections:Redis 服务器由于 maxclients 限制而拒绝的连接数量。
  • sync_full:Redis 主机和从机进行完全同步的次数。
  • sync_partial_ok:Redis 服务器接受 PSYNC 请求的次数。
  • sync_partial_err:Redis 服务器拒绝 PSYNC 请求的次数。
  • expired_keys:键过期事件的总数。
  • evicted_keys:由于 maxmemory 限制,而被回收内存的键的总数。
  • keyspace_hits:在主字典中成功查找到键的次数。
  • keyspace_misses:在主字典中未能成功查找到键的次数。
  • pubsub_channels:客户端订阅的发布/订阅频道的总数量。
  • pubsub_patterns:客户端订阅的发布/订阅模式的总数量。
  • latest_fork_usec:最近一次 fork 操作消耗的时间,以微秒为单位。
  • migrate_cached_sockets:迁移已缓存的套接字的数量。
  • slave_expires_tracked_keys:为到期目的而跟踪的键数(仅适用于可写从库)。
  • active_defrag_hits:通过激活碎片整理过程,执行的值重新分配的数量。
  • active_defrag_misses:通过激活碎片整理过程,启动的中止值重新分配数。
  • active_defrag_key_hits:主动进行碎片整理的键数。
  • active_defrag_key_misses:活动碎片整理过程跳过的键数。

复制(replication)部分

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

  • role:如果这个实例是某个 Redis 主机的从机,那么这个字段的值为“slave”;如果这个实例不是任何 Redis 主机的从机,那么这个字段的值是“master”。注意,一个从机可以是另一个从机的主机(Daisy Chaining,菊花链)。
  • master_replid:Redis 服务器的复制 ID。
  • master_replid2:辅助复制 ID,用于故障转移后的 PSYNC。
  • master_repl_offset:全局的复制偏移量。
  • second_repl_offset:接受复制 ID 的偏移量。
  • repl_backlog_active:表示 Redis 服务器是否为部分同步开启复制备份日志(backlog)功能的标志。
  • repl_backlog_size:备份日志的循环缓冲区的大小。
  • repl_backlog_first_byte_offset:备份日志缓冲区中的首个字节的复制偏移量。
  • repl_backlog_histlen:备份日志的实际数据长度。

如果这个 Redis 实例是一个从机,那么 replication 分段将会新增额外的字段,如下所示:

  • master_host:Redis 主机的主机名或 IP 地址。
  • master_port:Redis 主机监听的 TCP 端口。
  • master_link_status:链路状态(连接/断开)。
  • master_last_io_seconds_ago:最近一次和 Redis 主机交互至今的消耗时间,以秒为单位。
  • master_sync_in_progress:表示 Redis 主机正在将数据同步至从机。
  • slave_repl_offset:从库实例的复制偏移量。
  • slave_priority:实例作为故障转移候选者的优先级。
  • slave_read_only:指示从库是否为只读的标志。

如果 Redis 正在进行数据同步,那么 replication 分段将会新增额外的字段,如下所示:

  • master_sync_left_bytes:在同步完成之前,还剩余的数据总量,以字节为单位。
  • master_sync_last_io_seconds_ago:在一次 SYNC 操作期间,最近一次传输数据的 I/O 操作至今的消耗时间,以秒为单位。

如果主机和从机之间的链路断开了,那么 replication 分段将会新增额外的字段,如下所示:

  • master_link_down_since_seconds:从链路断开至今的时间,以秒为单位。

始终提供以下字段:

  • connected_slaves:已连接副本的数量。

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

  • min_slaves_good_slaves:目前运作良好的副本数量。

对于每个从机来说,replication 分段都会添加以下字段:

  • slaveXXX:显示从库的 id、IP 地址、端口和状态。

CPU 部分

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

  • used_cpu_sys:Redis 服务器消耗的系统 CPU 性能。
  • used_cpu_user:Redis 服务器消耗的用户 CPU 性能。
  • used_cpu_sys_children:后台进程消耗的系统 CPU 性能。
  • used_cpu_user_children:后台进程消耗的用户 CPU 性能。

commandstats 部分

commandstats 分段会提供基于命令类型的统计数据,包括:命令调用次数、命令消耗的 CPU 时间总量、每次执行命令消耗 CPU 时间的平均值。

对于每个命令类型,commandstats 分段每行的格式如下所示:

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

    其中,第一个 XXX 是命令的名称,第二个 XXX 是命令调用次数,第三个 XXX 是命令消耗的 CPU 时间总量(以微秒为单位),第三个 XXX 是每次调用命令消耗的 CPU 时间的平均值(以微秒为单位)。

集群(cluster)部分

cluster 分段当前只包含一个字段:

  • cluster_enabled:表示是否启用 Redis 集群功能的标志。

keyspace 部分

keyspace 分段会提供关于每个数据库的主字典的统计数据。这些统计数据包括键的数量、具有过期时间的键的数量和键的平均生存时间。

对于每个数据库来说,keyspace 分段每行的格式如下所示:

  • dbXXX: keys=XXX,expires=XXX

    其中,第一个 XXX 表示数据库的编号,第二个 XXX 表示键的数量,第三个 XXX 表示具有过期时间的键的数量,第四个 XXX 表示键的平均生存时间。

命令返回值

返回字符串文本行的集合。

文本行可能包含一个分段名称(以一个 # 字符开始)或者一个属性。所有的属性都是 field:value 的格式,以 \r\n 结尾。

示例

redis> INFO
# Server
redis_version:999.999.999
redis_git_sha1:3c968ff0
redis_git_dirty:0
redis_build_id:51089de051945df4
redis_mode:standalone
os:Linux 4.8.0-1-amd64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:6.3.0
process_id:9859
run_id:43590381b5eeb32219fac6d2f2711c7385e42dce
tcp_port:6379
uptime_in_seconds:2106116
uptime_in_days:24
hz:10
lru_clock:8202796
executable:/usr/local/bin/redis-server
config_file:

# Clients
connected_clients:4
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:488393344
used_memory_human:465.77M
used_memory_rss:502984704
used_memory_rss_human:479.68M
used_memory_peak:488398304
used_memory_peak_human:465.77M
used_memory_peak_perc:100.00%
used_memory_overhead:140710296
used_memory_startup:509680
used_memory_dataset:347683048
used_memory_dataset_perc:71.26%
allocator_allocated:488370440
allocator_active:488628224
allocator_resident:501837824
total_system_memory:1044770816
total_system_memory_human:996.37M
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.00
allocator_frag_bytes:257784
allocator_rss_ratio:1.03
allocator_rss_bytes:13209600
rss_overhead_ratio:1.00
rss_overhead_bytes:1146880
mem_fragmentation_ratio:1.03
mem_fragmentation_bytes:14674368
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0

# Persistence
loading:0
rdb_changes_since_last_save:21177377
rdb_bgsave_in_progress:0
rdb_last_save_time:1566377768
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:0
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_last_write_status:ok
aof_last_cow_size:0

# Stats
total_connections_received:42
total_commands_processed:24832800
instantaneous_ops_per_sec:0
total_net_input_bytes:2020472493
total_net_output_bytes:286661657
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:38736
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:5424725
keyspace_misses:2007763
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec: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

# Replication
role:master
connected_slaves:0
master_replid:5b651426b6fa54edef4fe8eaca1424eebaca3ca8
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
used_cpu_sys:2036.05
used_cpu_user:26270.73
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=2662821,expires=2,avg_ttl=858310544337003
redis> 

相关常用命令

redis 如何查看版本信息

redis> info
# Server
redis_version:3.2.12
...

头部的 redis_version 对应的值即为输出的版本号,更详细的信息查看 redis 如何查看版本信息