您的位置:首页 > 数据库 > Redis

redis-cli 的功能太强大了,你真的了解吗?

2021-02-23 21:30 1211 查看

玩过redis的朋友应该都知道有一个叫做 

redis-cli
 的客户端小工具,在实际开发中相信很多人只知道用 
redis-cli
 进行 REPL 式的交互,其实这只是一个非常小的子集,比如利用它可以在test和develop环境下进行高效的模拟测试,接下来我逐一给大家演示下。

一:非REPL (Read Eval Print Loop) 模式

通常我们都是使用REPL模式,就是连接端口之后,发一条 request 再等待 response 这样一个loop的形式,如下所示:

[root@localhost Desktop]# redis-cli -h 192.168.1.216
192.168.1.216:6379> set username jack
OK
192.168.1.216:6379> set password 12345
OK
192.168.1.216:6379>

其实我还可以直接在命令行中使用 

redis-cli
 再配合各种附加参数,效果和上面是一模一样的,比如下面这样:


[root@localhost Desktop]# redis-cli -h 192.168.1.216 set username jack
OK
[root@localhost Desktop]# redis-cli -h 192.168.1.216 set password 12345
OK
[root@localhost Desktop]#

看到没有,是不是有点意思哈~~~

二:从本地文件中执行命令导入

这功能还是挺酷的,你可以把本地文件中的一组redis命令直接导入到 redis-cli 中执行,免去了一行一行键入之苦,对不对,工作量可是大大的减轻了哈,参照下面流程。

1. 新建目录

在 /usr/ 下面新建一个txt文件,执行两个set操作。

然后用 < 命令导入就可以了,这里216的ip是本地局域网内的一台虚拟机,是不是有点像pipeline管道操作,~~~ 如下所示:


[root@localhost Desktop]# redis-cli -h 192.168.1.216 < /usr/1.txt
OK
OK
[root@localhost Desktop]#

三:对指定的redis命令重复调用

乍一听貌似没啥业务场景,仔细想想还是有的,比如说不断的调用 info 命令,这就是一个好的监控,对不对?命令格式如下:


redis-cli -r <count> and -i <delay> command

其中 -r 是 repeat 的次数,-i 是 delay 的 sencond 的秒数,接下来我演示一下,调用info命令10次,每次延迟1s,如下所示:


[root@localhost Desktop]# redis-cli -h 192.168.1.216 -r 10 -i 1 INFO
# Server
redis_version:3.2.4
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:fc9ad9a14d3a0fb5
redis_mode:standalone
os:Linux 3.10.0-327.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:6171
run_id:8d1d5cffbf81e31c6c6e0bd144186e9df9fea482
tcp_port:6379
uptime_in_seconds:3536932
uptime_in_days:40
hz:10
lru_clock:5049094
executable:/etc/redis/redis-server
config_file:/etc/redis/6379.conf

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

# Memory
used_memory:1295512
used_memory_human:1.24M
used_memory_rss:10395648
used_memory_rss_human:9.91M
used_memory_peak:35199336
used_memory_peak_human:33.57M
total_system_memory:2099109888
total_system_memory_human:1.95G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:8.02
mem_allocator:jemalloc-4.0.3

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1481443658
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
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
...

这么多输出,有点眼花缭乱,大多时候我只关注 used_memory_human 字段,看看当前 redis 占用了多少内存,这里就可以用grep过滤一下:


[root@localhost Desktop]# redis-cli -h 192.168.1.216 -r 10 -i 1 INFO | grep used_memory_human
used_memory_human:1.24M
used_memory_human:1.24M
used_memory_human:1.24M
used_memory_human:1.24M
used_memory_human:1.24M
used_memory_human:1.24M
used_memory_human:1.24M
used_memory_human:1.24M
used_memory_human:1.24M
used_memory_human:1.24M
[root@localhost Desktop]#

可以清楚的看到,当前 memory_human 占用 1.24M,一个麻雀式的监控就来了!

四:--stat完整版监控

如果只有一个

内存占用指标
肯定不能满足大家的实际需求,比如你就看不到当前的redis中有多少的keys,有多少的clients,有多少被blocked,有多少requests等等信息,如果这些都有了,是不是有点像mongodb中的mongostats呢?哈哈,迫不及待的给大家来演示一下吧,非常的简单。。。


[root@localhost Desktop]# redis-cli -h 192.168.1.216 --stat
------- data ------ --------------------- load -------------------- - child -
keys       mem      clients blocked requests            connections          
27         1.24M    7       0       1198768 (+0)        2206        
27         1.24M    7       0       1198769 (+1)        2206        
27         1.24M    7       0       1198770 (+1)        2206        
27         1.24M    7       0       1198771 (+1)        2206        
27         1.24M    7       0       1198772 (+1)        2206        
27         1.24M    7       0       1198773 (+1)        2206        
27         1.24M    7       0       1198774 (+1)        2206        
27         1.24M    7       0       1198775 (+1)        2206        
27         1.24M    7       0       1198776 (+1)        2206        
27         1.24M    7       0       1198777 (+1)        2206        
27         1.24M    7       0       1198778 (+1)        2206        
27         1.24M    7       0       1198779 (+1)        2206        
27         1.24M    7       0       1198780 (+1)        2206        
27         1.27M    7       0       1198782 (+2)        2206        
27         1.24M    7       0       1198783 (+1)        2206        
27         1.24M    7       0       1198784 (+1)        2206        
27         1.24M    7       0       1198785 (+1)        2206

好了,更多的好功能,期待大家去挖掘,希望本篇对您有帮助~~~


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: