Info 命令返回关于 Redis 服务器的各种信息和统计数值。通过给定可选的参数 section ,可以让命令只返回某一部分的信息。

1. 显示模块

  • server : 一般 Redis 服务器信息,包含以下域:

    • redis_version
    • redis_git_sha1
    • redis_git_dirty
    • os
    • arch_bits:架构(32 或 64 位)
    • multiplexing_api : Redis 所使用的事件处理机制
    • gcc_version : 编译 Redis 时所使用的 GCC 版本
    • process_id : 服务器进程的 PID
    • run_id : Redis 服务器的随机标识符(用于 Sentinel 和集群)
    • tcp_port :
    • uptime_in_seconds : 自 Redis 服务器启动以来,经过的秒数
    • uptime_in_days : 自 Redis 服务器启动以来,经过的天数
    • lru_clock : 以分钟为单位进行自增的时钟,用于 LRU 管理
  • clients : 已连接客户端信息,包含以下域:
    • connected_clients : 已连接客户端的数量(不包括通过从属服务器连接的客户端)
    • client_longest_output_list : 当前连接的客户端当中,最长的输出列表
    • client_longest_input_buf : 当前连接的客户端当中,最大输入缓存
    • blocked_clients : 正在等待阻塞命令(BLPOPBRPOPBRPOPLPUSH)的客户端的数量
  • memory : 内存信息
    • used_memory : 由 Redis 分配器分配的内存总量,以字节(byte)为单位
    • used_memory_human : 以人类可读的格式返回 Redis 分配的内存总量
    • used_memory_rss : 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致。
    • used_memory_peak : Redis 的内存消耗峰值(以字节为单位)
    • used_memory_peak_human : 以人类可读的格式返回 Redis 的内存消耗峰值
    • used_memory_lua : Lua 引擎所使用的内存大小(以字节为单位)
    • mem_fragmentation_ratio : used_memory_rss 和 used_memory 之间的比率
    • mem_allocator : 在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc 。
  • persistence : RDB 和 AOF 的相关信息
  • stats : 一般统计信息
  • replication : 主/从复制信息
  • cpu : CPU 计算量统计信息
  • commandstats : Redis 命令统计信息
  • cluster : Redis 集群信息
  • keyspace : 数据库相关的统计信息

2. 使用示例

info 命令基本语法如下:

redis 127.0.0.1:6379> INFO [section]

info 可以一次性获取所有的信息,也可以按块取信息。

# 获取所有信息
> info
# 获取内存相关信息
> info memory
# 获取复制相关信息
> info replication

2.1 获取所有信息

127.0.0.1:6379> info
# Server
redis_version:6.2.6
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:b61f37314a089f19
redis_mode:standalone
os:Linux 4.4.0-117-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:10.2.1
process_id:1
process_supervised:no
run_id:931c8be0f80eb6ed2e3d787d3e8c324bb536adba
tcp_port:6379
server_time_usec:1640706998540791
uptime_in_seconds:400892
uptime_in_days:4
hz:10
configured_hz:10
lru_clock:13317046
executable:/data/redis-server
config_file:
io_threads_active:0# Clients
connected_clients:2     # 这个就是正在连接的客户端数量
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:24
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0# Memory
used_memory:895312
used_memory_human:874.33K
used_memory_rss:8028160
used_memory_rss_human:7.66M
used_memory_peak:953480
used_memory_peak_human:931.13K
used_memory_peak_perc:93.90%
used_memory_overhead:851480
used_memory_startup:809880
used_memory_dataset:43832
used_memory_dataset_perc:51.31%
allocator_allocated:938320
allocator_active:1196032
allocator_resident:3428352
total_system_memory:2097278976
total_system_memory_human:1.95G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.27
allocator_frag_bytes:257712
allocator_rss_ratio:2.87
allocator_rss_bytes:2232320
rss_overhead_ratio:2.34
rss_overhead_bytes:4599808
mem_fragmentation_ratio:9.42
mem_fragmentation_bytes:7175616
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:41000
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
lazyfreed_objects:0# Persistence
loading: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:1640505723
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:192512
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
module_fork_in_progress:0
module_fork_last_cow_size:0# Stats
total_connections_received:8
total_commands_processed:84
instantaneous_ops_per_sec:0
total_net_input_bytes:2508
total_net_output_bytes:124338
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
expired_stale_perc:0.00
expired_time_cap_reached_count:0
expire_cycle_cpu_milliseconds:8174
evicted_keys:0
keyspace_hits:14
keyspace_misses:6
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:315
total_forks:7
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
tracking_total_keys:0
tracking_total_items:0
tracking_total_prefixes:0
unexpected_error_replies:0
total_error_replies:14
dump_payload_sanitizations:0
total_reads_processed:123
total_writes_processed:105
io_threaded_reads_processed:0
io_threaded_writes_processed:0# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:9361c697e9805a63571591ac1e01eb07d8fec1d1
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:344.796000
used_cpu_user:310.832000
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000
used_cpu_sys_main_thread:344.788000
used_cpu_user_main_thread:310.832000# Modules# Errorstats
errorstat_ERR:count=14# Cluster
cluster_enabled:0# Keyspace
db0:keys=9,expires=0,avg_ttl=0
db5:keys=2,expires=0,avg_ttl=0
127.0.0.1:6379>

2.2 获取内存信息

127.0.0.1:6379> info memory
# Memory
used_memory:893568
used_memory_human:872.62K
used_memory_rss:8024064
used_memory_rss_human:7.65M
used_memory_peak:953480
used_memory_peak_human:931.13K
used_memory_peak_perc:93.72%
used_memory_overhead:851480
used_memory_startup:809880
used_memory_dataset:42088
used_memory_dataset_perc:50.29%
allocator_allocated:1089360
allocator_active:1355776
allocator_resident:3588096
total_system_memory:2097278976
total_system_memory_human:1.95G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.24
allocator_frag_bytes:266416
allocator_rss_ratio:2.65
allocator_rss_bytes:2232320
rss_overhead_ratio:2.24
rss_overhead_bytes:4435968
mem_fragmentation_ratio:9.41
mem_fragmentation_bytes:7171520
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:41000
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
lazyfreed_objects:0
127.0.0.1:6379>

2.3 查询每秒执行指令数

> ./redis-cli info stats |grep ops
instantaneous_ops_per_sec:234

ops_per_sec: operations per second,也就是每秒操作数。
也就是所有客户端每秒会发送 234 条指令到服务器执行。

2.4 客户端连接数量

这个信息在 Clients 块里,可以通过 info clients 看到。

connected_clients:124  # 这个就是正在连接的客户端数量
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

这个信息也是比较有用的,通过观察这个数量可以确定是否存在意料之外的连接。如果发现这个数量不对劲,接着就可以使用 client list指令列出所有的客户端链接地址来确定源头。

关于客户端的数量还有个重要的参数需要观察,那就是 rejected_connections,它表示因为超出最大连接数限制而被拒绝的客户端连接次数,如果这个数字很大,意味着服务器的最大连接数设置的过低需要调整 maxclients 参数。

redis-cli info stats |grep reject
rejected_connections:0

3. 命令行工具

3.1 执行单条命令

通过将命令参数直接传递给 redis-cli 来执行指令并获取输出结果。

$ redis-cli incrby a 1
(integer) 1
$ redis-cli incrby a 1
(integer) 2

如果输出的内容较大,还可以将输出重定向到外部文件

$ redis-cli info > info.txt
$ wc -l info.txt120 info.txt

上面的命令指向的服务器是默认服务器地址,如果想指向特定的服务器可以这样

// -n 2 表示使用第2个库,相当于 select 2
$ redis-cli -h localhost -p 6379 -n 2 ping
PONG

3.2 执行批量命令

直接使用 redis-cli 来批量执行一系列指令。

$ cat cmds.txt
set foo1 bar1
set foo2 bar2
set foo3 bar3
......
$ cat cmds.txt | redis-cli
OK
OK
OK
...

上面的指令使用了 Unix 管道将 cat 指令的标准输出连接到 redis-cli 的标准输入。其实还可以直接使用输入重定向来批量执行指令。

$ redis-cli < cmds.txt
OK
OK
OK
...

3.3 重复执行指令

redis-cli 还支持重复执行指令多次,每条指令执行之间设置一个间隔时间,如此便可以观察某条指令的输出内容随时间变化。

// 间隔1s,执行5次,观察qps的变化
$ redis-cli -r 5 -i 1 info | grep ops
instantaneous_ops_per_sec:43469
instantaneous_ops_per_sec:47460
instantaneous_ops_per_sec:47699
instantaneous_ops_per_sec:46434
instantaneous_ops_per_sec:47216

如果将次数设置为 -1 那就是重复无数次永远执行下去。如果不提供 -i 参数,那就没有间隔,连续重复执行。在交互模式下也可以重复执行指令,形式上比较怪异,在指令前面增加次数

127.0.0.1:6379> 5 ping
PONG
PONG
PONG
PONG
PONG

3.4 监控服务器状态

我们可以使用 --stat 参数来实时监控服务器的状态,间隔 1s 实时输出一次。

$ redis-cli --stat
------- data ------ --------------------- load -------------------- - child -
keys       mem      clients blocked requests            connections
2          6.66M    100     0       11591628 (+0)       335
2          6.66M    100     0       11653169 (+61541)   335
2          6.66M    100     0       11706550 (+53381)   335
2          6.54M    100     0       11758831 (+52281)   335
2          6.66M    100     0       11803132 (+44301)   335
2          6.66M    100     0       11854183 (+51051)   335

如果觉得间隔太长或是太短,可以使用 -i 参数调整输出间隔。

3.5 扫描大 KEY

每次遇到 Redis 偶然卡顿问题,第一个想到的就是实例中是否存在大 KEY,大 KEY的内存扩容以及释放都会导致主线程卡顿。如果知道里面有没有大 KEY,可以自己写程序扫描,不过这太繁琐了。redis-cli 提供了 --bigkeys 参数可以很快扫出内存里的大 KEY,使用 -i 参数控制扫描间隔,避免扫描指令导致服务器的 ops 陡增报警。

$ ./redis-cli --bigkeys -i 0.01
# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).[00.00%] Biggest zset   found so far 'hist:aht:main:async_finish:20180425:17' with 1440 members
[00.00%] Biggest zset   found so far 'hist:qps:async:authorize:20170311:27' with 2465 members
[00.00%] Biggest hash   found so far 'job:counters:6ya9ypu6ckcl' with 3 fields
[00.01%] Biggest string found so far 'rt:aht:main:device_online:68:{-4}' with 4 bytes
[00.01%] Biggest zset   found so far 'machine:load:20180709' with 2879 members
[00.02%] Biggest string found so far '6y6fze8kj7cy:{-7}' with 90 bytes

redis-cli 对于每一种对象类型都会记录长度最大的 KEY,对于每一种对象类型,刷新一次最高记录就会立即输出一次。它能保证输出长度为 Top1 的 KEY,但是 Top2、Top3等 KEY 是无法保证可以扫描出来的。一般的处理方法是多扫描几次,或者是消灭了 Top1 的 KEY 之后再扫描确认还有没有次大的 KEY

3.6 采样服务器指令

线上 Redis 服务器的 OPS 太高,有很多业务模块都在使用这个 Redis,如何才能判断出来是哪个业务导致了 OPS 异常的高。这时可以对线上服务器的指令进行采样,观察采样的指令大致就可以分析出 OPS 占比高的业务点。这时就要使用 monitor 指令,它会将服务器瞬间执行的指令全部显示出来。不过使用的时候要注意即使使用 ctrl+c 中断,否则你的显示器太多的指令瞬间让你眼花缭乱。

$ redis-cli --host 192.168.x.x --port 6379 monitor
1539853410.458483 [0 10.100.90.62:34365] "GET" "6yax3eb6etq8:{-7}"
1539853410.459212 [0 10.100.90.61:56659] "PFADD" "growth:dau:20181018" "2klxkimass8w"
1539853410.462938 [0 10.100.90.62:20681] "GET" "6yax3eb6etq8:{-7}"
1539853410.467231 [0 10.100.90.61:40277] "PFADD" "growth:dau:20181018" "2kei0to86ps1"
1539853410.470319 [0 10.100.90.62:34365] "GET" "6yax3eb6etq8:{-7}"
1539853410.473927 [0 10.100.90.61:58128] "GET" "6yax3eb6etq8:{-7}"
1539853410.475712 [0 10.100.90.61:40277] "PFADD" "growth:dau:20181018" "2km8sqhlefpc"
1539853410.477053 [0 10.100.90.62:61292] "GET" "6yax3eb6etq8:{-7}"

3.7 诊断服务器时延

平时我们诊断两台机器的时延一般是使用 Unixping 指令。Redis 也提供了时延诊断指令,不过它的原理不太一样,它是诊断当前机器和 Redis 服务器之间的指令(PING指令)时延,它不仅仅是物理网络的时延,还和当前的 Redis 主线程是否忙碌有关。如果你发现 Unixping 指令时延很小,而 Redis 的时延很大,那说明 Redis 服务器在执行指令时有微弱卡顿。

$ redis-cli --host 192.168.x.x --port 6379 --latency
min: 0, max: 5, avg: 0.08 (305 samples)

时延单位是 ms

3.8 远程 rdb 备份

执行下面的命令就可以将远程的 Redis 实例备份到本地机器,远程服务器会执行一次 bgsave操作,然后将 rdb 文件传输到客户端。

$ ./redis-cli --host 192.168.x.x --port 6379 --rdb ./user.rdb
SYNC sent to master, writing 2501265095 bytes to './user.rdb'
Transfer finished with success.

参考:
https://juejin.cn/book/6844733724618129422/section/6844733724739764231

Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)相关推荐

  1. [MySQL]命令行工具和基本操作

    [MySQL]命令行工具和基本操作 一 MySQL命令行工具  (查看帮助 ---help,或 -?) 1)MySQL MySQL是一个简单的SQL外壳(有GNU readline功能).它支持交互式 ...

  2. 通过命令行工具使用阿里云资源编排服务

    资源编排ROS 是一种简单易用的云计算资源管理和自动化运维服务.用户通过模板描述多个云计算资源的依赖关系.配置等,并自动完成所有资源的创建和配置,以达到自动化部署.运维等目的. 了解更多 通过命令行工 ...

  3. IgH详解六、IgH命令行工具使用

    当加载好主栈驱动程序后,可以通过命令行工具查看主栈和从站的相关信息. 下面接收命令行的具体功能 1.ethercat alias [ OPTIONS ] < ALIAS > * --ali ...

  4. python3命令需要使用命令行开发者工具_3 个 Python 命令行工具

    用 Click.Docopt 和 Fire 库写你自己的命令行应用. 有时对于某项工作来说一个命令行工具就足以胜任.命令行工具是一种从你的 shell 或者终端之类的地方交互或运行的程序.Git 和 ...

  5. 构建现代化的命令行工具

    文章源于 lambdas.dev 每当我们想要创建一个基于 NodeJS 的命令行工具时,就会衍生出一堆问题需要解决,比如如何准备开发环境,如何打包转译代码,如何使代码在转译后保持可调用的状态同时尽可 ...

  6. Python -- Scrapy 命令行工具(command line tools)

    结合scrapy 官方文档,进行学习,并整理了部分自己学习实践的内容 Scrapy是通过 scrapy 命令行工具进行控制的. 这里我们称之为 "Scrapy tool" 以用来和 ...

  7. 【Android 命令行工具】Android 命令行工具简介 ( 官方文档 | SDK 命令行工具 | SDK 构建工具 | SDK 平台工具 | 模拟器工具 | Jetifier 工具 )

    文章目录 一.官方文档 二.Android 命令行工具简介 1.SDK 命令行工具 2.SDK 构建工具 3.SDK 平台工具 4.模拟器工具 5.Jetifier 工具 一.官方文档 Android ...

  8. Ubuntu之make:make命令行工具的简介、安装、使用方法之详细攻略

    Ubuntu之make:make命令行工具的简介.安装.使用方法之详细攻略 目录 make命令行工具的简介 make命令行工具的安装 make命令行工具的使用方法 make命令行工具的简介 Ubunt ...

  9. linux终端使用python3,3 个 Python 命令行工具 | Linux 中国

    原标题:3 个 Python 命令行工具 | Linux 中国 用 Click.Docopt 和 Fire 库写你自己的命令行应用. -- Jeff Triplett, Lacey Williams ...

  10. 命令行工具开发:如何快速实现命令行提示?

    简介:对于稍微复杂一些的命令行工具,命令行的提示功能必不可少.那么对于不同语言的开发者,有没有一种简单快捷的实现方式呢?本文分享一种快速实现的方法,使用YAML文件定义命令行工具的使用规范,再通过工具 ...

最新文章

  1. NetCore 2.0 MVC入门之 Startup 配置
  2. 这些 AI 大咖的实践干货,从事人工智能的你应该知道
  3. bootstrap 弹框使用
  4. 安全的SD-WAN是如何工作?—Vecloud
  5. VirtualBox使用技巧
  6. boost::mp11::mp_set_difference相关用法的测试程序
  7. 搭建个人博客,还有比这更快的?
  8. idea 14.1.4 激活方式
  9. 模板多个列表级联_Excel办公技巧:使用power query快速合并同一工作簿的多个工作表...
  10. angularJS前端分页插件
  11. 【数字图像处理系列一】opencv-python快速入门篇
  12. dwg android软件,CAD迷你看图软件手机版
  13. 很酷的软件WinDirStat
  14. 根据身份证号码获取身份证信息(省市县、出生日期、性别)
  15. theano安装教程 linux,Ubuntu安装Theano+CUDA
  16. 上班要了解的一些法律条例
  17. 华硕K43TK光驱改硬盘教程
  18. 视频去水印哪个好用-视频去水印软件app
  19. ADS学习:统计分析——灵敏度分析、良率优化
  20. LaMDA 是有感觉的吗?

热门文章

  1. 2022-2028年全球与中国人字拖市场研究及前瞻分析报告
  2. 2022-2028年全球与中国闪光棉市场研究及前瞻分析报告
  3. 2022-2028年中国防水橡胶布行业市场发展模式及投资前景分析报告
  4. Windows10快捷应用指令
  5. 矩阵拼接 cat padding_pytorch
  6. Jieba分词原理与解析
  7. GPU自动调度卷积层
  8. 2021年大数据Hive(九):Hive的数据压缩
  9. Docker核心技术之Dockerfile
  10. mysql屏蔽关键字实现方法_PHP屏蔽过滤指定关键字的方法