Redis INFO命令详解

INFO命令会返回Redis服务器的状态信息和统计数据,计算机可以很简单地解析这些返回数据,用户也可以轻松地阅读这些返回数据。

可以通过以下的可选参数,选择查看特定分段的服务器信息:

  • server:Redis服务器相关的通用信息
  • clients:客户端连接的相关信息
  • memory:内存消耗的相关信息
  • persistence:RDB(Redis DataBase)和AOF(Append-Only File)的相关信息
  • stats:通用统计数据
  • replication:主/从复制的相关信息
  • cpu:CPU消耗的统计数据
  • commandstats:Redis命令的统计数据
  • cluster:Redis集群的相关信息
  • keyspace:数据库相关的统计数据

 

INFO命令还可以使用以下参数:

  • all:返回所有的服务器信息
  • default:只返回默认的信息集合

当不提供任何参数时,默认会使用default选项。

返回值

返回值为批量字符串,它是多条文本行的集合。

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

# Server
redis_version:3.2.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:f0eb22ef0ed8848d
redis_mode:standalone
os:Linux 2.6.32-642.3.1.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.7
process_id:25911
run_id:cba472da2972cc4e70a5814a4b9d6c548d9421fe
tcp_port:53189
uptime_in_seconds:93330
uptime_in_days:1
hz:10
lru_clock:14637818
executable:/usr/bin/redis-server
config_file:/etc/redis.conf

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

# Memory
used_memory:2872800
used_memory_human:2.74M
used_memory_rss:7544832
used_memory_rss_human:7.20M
used_memory_peak:4158144
used_memory_peak_human:3.97M
total_system_memory:16723492864
total_system_memory_human:15.57G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:2.63
mem_allocator:jemalloc-3.6.0

# Persistence
loading:0
rdb_changes_since_last_save:4261
rdb_bgsave_in_progress:0
rdb_last_save_time:1574825576
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
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

# Stats
total_connections_received:225
total_commands_processed:8970
instantaneous_ops_per_sec:0
total_net_input_bytes:3146833
total_net_output_bytes:10730453
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:1
evicted_keys:0
keyspace_hits:4438
keyspace_misses:17
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0

# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:53.50
used_cpu_user:31.25
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=2,expires=0,avg_ttl=0

请注意,根据Redis的不同版本,INFO命令可能会在返回值中添加或删除某些字段。因此,一个健壮的客户端应用程序应当在解析这个命令的返回值时,跳过未知的属性,并且能够正常处理缺失的字段。

Redis 2.4版本或更高版本的字段描述如下所示:

1. server分段的字段含义

127.0.0.1:53189> INFO server
# Server
redis_version:3.2.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:f0eb22ef0ed8848d
redis_mode:standalone
os:Linux 2.6.32-642.3.1.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.7
process_id:25911
run_id:cba472da2972cc4e70a5814a4b9d6c548d9421fe
tcp_port:53189
uptime_in_seconds:93376
uptime_in_days:1
hz:10
lru_clock:14637864
executable:/usr/bin/redis-server
config_file:/etc/redis.conf

server分段中的所有字段的含义如下所示:

  • redis_version:Redis服务器的版本号。

  • redis_git_sha1:Git SHA1。

  • redis_git_dirty:GIT脏数据标志。

  • os:Redis服务器使用的操作系统。

  • arch_bits:服务器架构(32位或64位)。

  • multiplexing_api:Redis使用的事件循环机制。

  • gcc_version:用来编译这个Redis服务器的GCC编译器的版本。

  • process_id:Redis服务器进程的进程号(PID)。

  • run_id:用于标识Redis服务器的随机值(Redis的哨兵模式和集群模式会使用这个随机值)。

  • tcp_port:TCP/IP的监听端口。

  • uptime_in_seconds:Redis服务器启动至今的时间,以秒为单位。

  • uptime_in_days:Redis服务器启动至今的时间,以天为单位。

  • lru_clock:每分钟都会递增的时钟,用于LRU(Least Recently Used,最近最少使用)缓存管理。

  • executable:Redis服务器的可执行文件的路径。

  • config_file:Redis服务器的配置文件的路径。

2. clients分段的字段含义

127.0.0.1:53189> INFO clients
# Clients
connected_clients:8
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

clients分段中的所有字段的含义如下所示:

  • connected_clients:客户端连接的数量(来自从机的连接除外)。

  • client_longest_output_list:当前的客户端连接之中,最长的输出列表。

  • client_biggest_input_buf:当前的客户端连接之中,最大的输入缓冲区。

  • blocked_clients:由于阻塞调用(BLPOPBRPOPBRPOPLPUSH)而等待的客户端的数量。

3. memory分段的字段含义

127.0.0.1:53189> INFO memory
# Memory
used_memory:2857664
used_memory_human:2.73M
used_memory_rss:7589888
used_memory_rss_human:7.24M
used_memory_peak:4158144
used_memory_peak_human:3.97M
total_system_memory:16723492864
total_system_memory_human:15.57G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:2.66
mem_allocator:jemalloc-3.6.0

memory分段中的所有字段的含义如下所示:

  • used_memory:Redis使用它的内存分配器(可以是标准的libcjemalloctcmalloc分配器)分配的内存总量,以字节为单位。

  • 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消耗的内存峰值,显示为用户易于阅读的格式。

  • 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使用的内存回收策略,可以是noevictionallkeys-lruvolatile-lruallkeys-randomvolatile-randomvolatile-ttl

  • mem_fragmentation_ratioused_memory_rssused_memory之间的比率。

  • mem_allocator:Redis使用的内存分配器,在编译时选择指定。

在理想情况下,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是否存在这种问题。

4. persistence分段的字段含义

127.0.0.1:53189> INFO persistence
# Persistence
loading:0
rdb_changes_since_last_save:4276
rdb_bgsave_in_progress:0
rdb_last_save_time:1574825576
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
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

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保存操作,那么这个字段表示已经消耗的时间,以秒为单位。

  • 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重写操作的状态。

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:预计完成加载转储文件需要消耗的时间,以秒为单位。

5. stats分段的字段含义

127.0.0.1:53189> INFO stats
# Stats
total_connections_received:227
total_commands_processed:9011
instantaneous_ops_per_sec:0
total_net_input_bytes:3154991
total_net_output_bytes:10734219
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:1
evicted_keys:0
keyspace_hits:4455
keyspace_misses:17
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0

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:迁移已缓存的套接字的数量。

6. replication分段的字段含义

127.0.0.1:53189> INFO replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

replication分段中的所有字段的含义如下所示:

  • role:如果这个实例是某个Redis主机的从机,那么这个字段的值为“slave”;如果这个实例不是任何Redis主机的从机,那么这个字段的值是“master”。注意,一个从机可以是另一个从机的主机(Daisy Chaining,菊花链)。

  • connected_slaves:已连接的Redis从机的数量。

  • master_repl_offset:全局的复制偏移量。

  • 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主机正在将数据同步至从机。

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

  • master_sync_left_bytes:在同步完成之前,还剩余的数据总量,以字节为单位。

  • master_sync_last_io_seconds_ago:在一次SYNC操作期间,最近一次传输数据的I/O操作至今的消耗时间,以秒为单位。

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

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

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

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

7. cpu分段的字段含义

127.0.0.1:53189> INFO cpu
# CPU
used_cpu_sys:53.60
used_cpu_user:31.31
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

cpu分段中的所有字段的含义如下所示:

  • used_cpu_sys:Redis服务器消耗的系统CPU性能。

  • used_cpu_user:Redis服务器消耗的用户CPU性能。

  • used_cpu_sys_children:后台进程消耗的系统CPU性能。

  • used_cpu_user_children:后台进程消耗的用户CPU性能。

8. commandstats分段的字段含义

127.0.0.1:53189> INFO commandstats
# Commandstats
cmdstat_del:calls=10,usec=71132,usec_per_call=7113.20
cmdstat_sadd:calls=3347,usec=29589,usec_per_call=8.84
cmdstat_srem:calls=5,usec=38,usec_per_call=7.60
cmdstat_sismember:calls=3352,usec=33033,usec_per_call=9.85
cmdstat_scard:calls=22,usec=13777,usec_per_call=626.23
cmdstat_srandmember:calls=81,usec=51536,usec_per_call=636.25
cmdstat_smembers:calls=22,usec=43304,usec_per_call=1968.36
cmdstat_zadd:calls=909,usec=141347,usec_per_call=155.50
cmdstat_zrem:calls=20,usec=327,usec_per_call=16.35
cmdstat_zrange:calls=117,usec=22763,usec_per_call=194.56
cmdstat_zrevrange:calls=59,usec=21404,usec_per_call=362.78
cmdstat_zcard:calls=829,usec=4776,usec_per_call=5.76
cmdstat_zscan:calls=1,usec=17073,usec_per_call=17073.00
cmdstat_keys:calls=20,usec=359,usec_per_call=17.95
cmdstat_scan:calls=1,usec=10,usec_per_call=10.00
cmdstat_auth:calls=227,usec=660,usec_per_call=2.91
cmdstat_info:calls=12,usec=178593,usec_per_call=14882.75

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

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

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

9. cluster分段的字段含义

127.0.0.1:53189> INFO cluster
# Cluster
cluster_enabled:0

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

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

10. keyspace分段的字段含义

127.0.0.1:53189> INFO keyspace
# Keyspace
db0:keys=2,expires=0,avg_ttl=0

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

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

  • dbXXXkeys=XXX,expires=XXX,avg_ttl=XXX
    其中,第一个XXX表示数据库的编号,第二个XXX表示键的数量,第三个XXX表示具有过期时间的键的数量,第四个XXX表示键的平均生存时间。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值