redis-cli中那些或許我們還不知道的一些實用小功能

一線碼農發表於2016-12-11

  玩過redis的朋友都知道,redis中有一個叫做redis-cli的小工具,我們可以利用它在test和develop環境下進行高效的模擬測試,然而在現實環境中,

我們只知道直接鍵入redis-cli啟動命令的互動式,而這個對redis-cli來說絕對是九牛一毛,下面我逐一給大家演示下。

 

一:非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操作。

 

然後我們用 < 命令匯入就可以了,這裡126的ip是本地區域網內的一臺虛擬機器,是不是有點像pipeline管道操作,牛逼吧~~~ 如下所示:

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

 

三:對指定redis命令重複呼叫

  對指定的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        

看到沒有,是不是非常的牛逼,一目瞭然。

 

好了,更多的好功能,等待大家去挖掘吧,希望本篇對大家有幫助~~~

相關文章