Redis進階實踐之十五 Redis-cli命令行工具使用詳解第二部分(結束)

1、介紹

           今天繼續redis-cli使用的介紹,上一篇文章寫了一部分,寫到第9個小節,今天就來完成第二部分。話很少說,開始咱們今天的講解。若是要想看第一篇文章,地址以下:http://www.cnblogs.com/PatrickLiu/p/8508975.html

2、使用詳解

          上篇文章寫到第9個小節,今天直接按着以上的序號,繼續來寫

          十、特殊的操做模式

                    到目前爲止,咱們看到了redis-cli的兩種主要模式。

                         一、命令行執行Redis命令。

                         二、交互式的「REPL-like」用法。

                然而,CLI執行與Redis相關的其餘輔助任務,這些任務將在下一節中介紹:

                         一、監控工具顯示有關Redis服務器的連續統計信息。

                         二、掃描Redis數據庫查找很是大的key。

                         三、與模式匹配的key空間掃描儀。

                         四、做爲Pub/Sub客戶訂閱頻道。

                         五、監視Redis實例中執行的命令。

                         六、以不一樣方式檢查Redis服務器的延遲。

                         七、檢查本地計算機的調度程序延遲。

                         八、從遠程Redis服務器傳輸RDB備份到本地。

                         九、扮演Redis從節點的角色,展示從節點所接受的東西。

                        十、模擬LRU工做負載以顯示有關按鍵命中的統計信息。

                        十一、Lua調試器的客戶端。


                  10.一、連續統計模式

                             這多是redis-cli的最不經常使用的功能之一,而且對於實時監控Redis實例來講是很是有用。要啓用此模式,使用--stat選項。 在這種模式下,CLI的行爲很是清晰的:html

                            $ redis-cli -h 192.168.127.130 -p 6379 --stat
                            ------- data ------ --------------------- load -------------------- - child -
                            keys       mem      clients blocked requests            connections
                            506        1015.00K 1       0       24 (+0)             7
                            506        1015.00K 1       0       25 (+1)             7
                            506        3.40M    51      0       60461 (+60436)      57
                            506        3.40M    51      0       146425 (+85964)     107
                            507        3.40M    51      0       233844 (+87419)     157
                            507        3.40M    51      0       321715 (+87871)     207
                            508        3.40M    51      0       408642 (+86927)     257
                            508        3.40M    51      0       497038 (+88396)     257


                          在這種模式下,每秒都會打印一條新的數據行,其中包含有用信息和舊數據點之間的差別。 您能夠輕鬆瞭解內存使用狀況,客戶端的連接等狀況。

                          在這種狀況下,-i <interval>選項的做用就是修改輸出新數據行的頻率。 默認值是一秒。

                 10.二、大鍵掃描

                            在這種特殊模式下,redis-cli可用做key空間容量大小的分析器。 它掃描佔據比較大空間的key的數據集合,並能提供有關數據集組成的數據類型的信息。 該模式使用--bigkeys 選項啓用,並生成十分詳細的輸出:

linux

                          [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --bigkeys

                           # 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).
                           # 您可使用-i 0.1來每100次SCAN命令休息0.1秒(一般不須要)。

                           [00.00%] Biggest string found so far 'ss' with 1 bytes
                           [00.00%] Biggest string found so far 'foo1' with 25 bytes

                           -------- summary -------

                          Sampled 5 keys in the keyspace!
                          Total key length in bytes is 20 (avg len 4.00)

                          Biggest string found 'foo1' has 25 bytes

                          5 strings with 35 bytes (100.00% of keys, avg size 7.00)
                          0 lists with 0 items (00.00% of keys, avg size 0.00)
                          0 sets with 0 members (00.00% of keys, avg size 0.00)
                          0 hashs with 0 fields (00.00% of keys, avg size 0.00)
                          0 zsets with 0 members (00.00% of keys, avg size 0.00)


                            在輸出的第一部分中,報告每一個大於前一個較大鍵(相同類型)的新鍵。 摘要部分提供有關Redis實例內數據的通常統計信息。

                            該程序使用 SCAN 命令,所以它能夠在不影響客戶端操做的狀況下在繁忙的服務器上執行,不過也可使用-i選項來限制所請求的每100個鍵的掃描過程的秒數。 例如,-i 0.1會減慢程序的執行速度,但也會大幅減輕服務器上的負載。

                            請注意,摘要還會以更清晰的形式反映每次發現的最大鍵。 若是針對一個很是大的數據集運行,最初的輸出只是提供一些有趣的信息ASAP。


                 10.三、獲取鍵的列表

                              還能夠掃描密鑰空間,再次以不阻塞Redis服務器的方式(當您使用諸如 KEYS * 之類的命令時會發生這種狀況),並打印全部鍵的名稱,或者使用特定模式進行過濾。 此模式與 --bigkeys 選項同樣,使用SCAN命令,若是數據集正在發生更改,鍵就可能會屢次反映更改,但若是從迭代開始以來就存在該鍵,那麼該鍵也不會丟失。因爲它使用這個選項的命令叫作--scan。

程序員

                        [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --scan | more -8
                         name
                         age
                         aaa
                         myset
                         myhash
                         address
                         myzset
                         rlist


                             請注意,使用 head -8 僅用於打印輸出全部數據的前8行。

                             scan命令能夠配合 --pattern 選項使用模式匹配進行掃描redis

                      [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --scan --pattern 'a*'
                       age
                       aaa
                       address

           
                            根據鍵的名稱,經過使用wc命令可使管道輸出針對特定種類對象的計數:數據庫

                      [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --scan --pattern 'a*'
                      age
                      aaa
                      address

                      [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --scan --pattern 'a*' | wc -l
                      3


                               wc -l 這個選項的 -l,橫槓後面是英文字母 L 的小寫,不是數字 1。


                10.四、發佈/訂閱模式

                              只需使用PUBLISH命令,CLI就可以在 Redis Pub/Sub通道中發佈消息。這是預期的,由於PUBLISH命令與其餘任何命令很是類似,使用簡單。訂閱頻道爲了接收消息使用了特殊的方法 - 在這種狀況下,咱們須要阻止和等待消息,此方法是做爲redis-cli中的特殊模式實現的。 與其餘特殊模式不一樣,此模式不是經過使用特殊選項啓用的,而是經過使用SUBSCRIBE或PSUBSCRIBE命令啓用的,不管是交互模式仍是非交互模式:緩存

                        //非系統級通用通道
                        [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 psubscribe '*'
                        Reading messages... (press Ctrl-C to quit)
                        1) "psubscribe"
                        2) "*"
                        3) (integer) 1

                        //單一通道
                        [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 psubscribe mychannel
                        Reading messages... (press Ctrl-C to quit)
                        1) "psubscribe"
                        2) "*"
                        3) (integer) 1


                             ’*’ 帶有單引號的星號表示非系統發佈的消息通道,能夠接受來自任何用戶定義通道的信息,固然也能夠輸入具體名稱的通道,好比:mychannel,咱們針對具體名稱的通道發佈信息,必須制定通道名稱,不然無效。

                             * 單獨星號,沒有單引號包含的,會顯示系統當前全部發布的通道,以下:服務器

                       [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 psubscribe *
                        Reading messages... (press Ctrl-C to quit)
                        1) "psubscribe"
                        2) "datas"
                        3) (integer) 1
                        1) "psubscribe"
                        2) "logs"
                        3) (integer) 2
                        1) "psubscribe"
                        2) "redis-benchmark"
                        3) (integer) 3
                        1) "psubscribe"
                        2) "redis-cli"
                        3) (integer) 4
                        1) "psubscribe"
                        2) "redis.conf"
                        3) (integer) 5
                        1) "psubscribe"
                        2) "redis-sentinel"
                        3) (integer) 6
                        1) "psubscribe"
                        2) "redis-server"
                        3) (integer) 7
                        1) "psubscribe"
                        2) "redis-trib.rb"
                        3) (integer) 8
                        1) "psubscribe"
                        2) "sentinel.conf"
                        3) (integer) 9


                                 閱讀消息,消息顯示咱們輸入了 Pub/Sub 模式。 當其餘客戶端在某個頻道發佈某條消息時(例如,您可使用redis-cli PUBLISH mychannel mymessage),Pub/Sub模式中的CLI將顯示以下內容:網絡

                         [root@linux redis]#  redis-cli -h 192.168.127.130 -p 6379 publish mychannel mymessage
                         (integer) 1

                         顯示內容:
                         1) "pmessage"
                         2) "*"
                         3) "mychannel"
                         4) "mymessage"


                                  這對調試 發佈/訂閱 的問題很是有用。要退出發佈/訂閱模式只需處理CTRL-C。


                  10.五、監視在Redis中執行的命令

                                與 Pub/Sub 模式相似,使用MONITOR模式後,將自動輸入監控模式。它將打印Redis實例收到的全部命令:工具

                          [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 monitor
                          OK
                          1520321617.017015 [0 192.168.127.130:34984] "publish" "mych" "mymessage"
                          1520321654.339150 [0 192.168.127.130:34986] "set" "sex" "1"


                                請注意,可使用管道輸出,所以您可使用諸如grep等工具監視特定模式。


                 10.六、 監視Redis實例的延遲

                             Redis常常用於延遲很是嚴重的環境中。延遲涉及應用程序中的多個動態的部分,從客戶端庫到網絡堆棧,再到Redis實例自己。

                             CLI有多種功能用於研究Redis實例的延遲並瞭解延遲的最大值,平均值和分佈。

                             基本的延遲檢查工具是 --latency 選項。 使用此選項,CLI運行一個循環,將PING命令發送到Redis實例,並測量得到答覆的時間。這種狀況每秒發生100次,統計信息在控制檯中實時更新:

性能

                       [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --latency
                       min: 0, max: 3, avg: 0.28 (1051 samples)


                              統計數據以毫秒計數。一般狀況下,因爲系統內核調度程序運行redis-cli自己所致使的延遲,因此一個很是快的實例的平均延遲每每被高估了一點,因此0.19以上的平均延遲多是0.01或更少。然而,這一般不是一個大問題,由於咱們對幾毫秒或更長時間的事件才感興趣。

                              有時候,研究平均延遲期的最大值和平均值如何隨時間發展是有用的。--latency-history選項用於此目的:它的工做方式與--latency徹底相同,但每15秒(默認狀況下)一個全新的採樣會話從頭開始:

                      [root@linux ~]# redis-cli -h 192.168.127.130 -p 6379 --latency-history
                       min: 0, max: 6, avg: 0.35 (1230 samples) -- 15.00 seconds range
                       min: 0, max: 3, avg: 0.34 (1277 samples) -- 15.01 seconds range
                       min: 0, max: 6, avg: 0.30 (1272 samples) -- 15.00 seconds range
                       min: 0, max: 2, avg: 0.33 (1289 samples) -- 15.00 seconds range
                       min: 0, max: 4, avg: 0.36 (1312 samples) -- 15.01 seconds range
                       min: 0, max: 1, avg: 0.24 (67 samples)^C


                             您可使用-i <interval>選項更改採樣會話的時間間隔步長。

                             最早進的延遲研究工具,對於沒有經驗的用戶來講也有點難解釋明白,所以使用彩色終端顯示一系列延遲是一種能力。您將看到一個彩色輸出,指示不一樣樣本的百分比,以及不一樣的ASCII字符表示不一樣的延遲數字。 使用 --latency-dist 選項啓用此模式:

                        [root@linux ~]# redis-cli -h 192.168.127.130 -p 6379 --latency-dist
                        ---------------------------------------------
                        . - * #          .01 .125 .25 .5 milliseconds
                        1,2,3,...,9      from 1 to 9     milliseconds
                        A,B,C,D,E        10,20,30,40,50  milliseconds
                        F,G,H,I,J        .1,.2,.3,.4,.5       seconds
                        K,L,M,N,O,P,Q,?  1,2,4,8,16,30,60,>60 seconds
                        From 0 to 100%:                    
                        ---------------------------------------------
                        .-*#123456789ABCDEFGHIJKLMNOPQ?
                        .-*#123456789ABCDEFGHIJKLMNOPQ?
                        .-*#123456789ABCDEFGHIJKLMNOPQ?
                        .-*#123456789ABCDEFGHIJKLMNOPQ?
                        .-*#123456789ABCDEFGHIJKLMNOPQ?
                        .-*#123456789ABCDEFGHIJKLMNOPQ?
                        .-*#123456789ABCDEFGHIJKLMNOPQ?
                        .-*#123456789ABCDEFGHIJKLMNOPQ?
                        .-*#123456789ABCDEFGHIJKLMNOPQ?
                        .-*#123456789ABCDEFGHIJKLMNOPQ?


                              在redis-cli中還有另外一個很是不尋常的延遲工具。它不會檢查Redis實例的延遲,而是檢查運行redis-cli的計算機的延遲。你可能會問什麼延遲? 內核調度程序固有的延遲,管理虛擬化實例的程序的延遲等等。

                              咱們稱之爲內部延遲,由於它對大多數程序員來講是不透明的。 若是您的Redis實例延遲不佳,任何微不足道的事情都有多是形成延遲的罪魁禍首,那麼經過在運行Redis服務器的系統中直接在此特殊模式下運行redis-cli,能夠檢查系統的最佳性能。

                              經過測量內部延遲,您知道這是基準,Redis沒法超越您的系統。爲了在此模式下運行CLI,請使用--intrinsic-latency <test-time>。 測試的時間以秒爲單位,並指定redis-cli多少秒能夠檢查一次當前正在運行的系統的延遲。

                      [root@linux ~]# redis-cli -h 192.168.127.130 -p 6379 --intrinsic-latency 5
                       Max latency so far: 1 microseconds.
                       Max latency so far: 88 microseconds.
                       Max latency so far: 120 microseconds.
                       Max latency so far: 950 microseconds.
                       Max latency so far: 1192 microseconds.
                       Max latency so far: 1830 microseconds.
                       Max latency so far: 2107 microseconds.

                      32993317 total runs (avg latency: 0.1515 microseconds / 151.55 nanoseconds per run).
                      Worst run took 13903x longer than the average latency.


                             重要提示:必須在要運行Redis服務器的計算機上執行此命令,而不是在不一樣的主機上執行此命令。 它甚至不鏈接到Redis實例,只在本地執行測試。

                             在上述狀況下,個人系統不可能比最糟延遲2107微秒的狀況更好,因此我能夠指望某些查詢在不到1毫秒的時間內運行。


                  10.七、遠程備份RDB文件

                              在Redis複製的第一次同步期間,主設備和從設備以RDB文件的形式交換整個數據集。redis-cli利用此功能來提供遠程備份功能,該功能容許將RDB文件從任何Redis實例傳輸到運行redis-cli的本地計算機。要使用此模式,請使用--rdb <dest-filename>選項調用CLI:

                      [root@linux ~]# redis-cli -h 192.168.127.130 -p 6379 --rdb /tmp/dump.rdb
                      SYNC sent to master, writing 534 bytes to '/tmp/dump.rdb'
                      Transfer finished with success.


                           這是確保您擁有Redis實例的災難恢復RDB備份文件的簡單而有效的方法。 可是,在腳本或cron做業中使用此選項時,請確保檢查命令的返回值。若是它不爲零,則發生錯誤,以下例所示:

                      [root@linux ~]# redis-cli -h 192.168.127.130 -p 6379 --rdb /tmp/dump.rdb
                      SYNC sent to master, writing 534 bytes to '/tmp/dump.rdb'
                      Transfer finished with success.
                      [root@linux ~]# echo $?
                       0

           

               10.八、從模式

                           CLI的從屬模式是一種高級功能,可用於Redis開發人員和調試操做。它容許檢查主站發送到複製流中的從站以便將寫入傳播到其副本。選項名稱簡單--slave。示例代碼以下:

                      [root@linux ~]# redis-cli -h 192.168.127.129 -p 6379 --slave
                      SYNC with master, discarding 535 bytes of bulk transfer...
                      SYNC done. Logging commands from master.


                           該命令首先丟棄第一個同步的RDB文件,而後以CSV格式記錄每一個收到的命令。

                           若是您認爲某些命令未在您的從站中正確複製,這也是檢查發生了什麼事情的好方法,對於改進錯誤報告也是有用的信息。


               10.九、執行LRU模擬

                           Redis一般用做LRU驅逐的緩存。根據鍵(key)的數量和爲緩存分配的內存量(經過maxmemory指令指定),緩存命中和未命中的數量將會改變。有時,模擬命中率對正確配置緩存很是有用。

                          CLI有一個特殊模式,它在請求模式中使用80-20%冪律分佈來執行對GET和SET操做的模擬。這意味着20%的鍵將被80%的時間用來請求,這是緩存場景中的廣泛存在的定律。

                          從理論上來說,基於給定的請求分佈和Redis內存開銷,能夠用數學公式分析並計算命中率。 可是,Redis能夠配置爲不一樣的LRU設置(樣本數量),而且LRU的實現(在Redis中近似)在不一樣版本之間也會有很大的變化。相似地,每一個鍵的內存容量在各個版本之間也可能會有所不一樣。這就是爲何建立這個工具的緣由:它的主要動機是測試Redis的LRU實現的質量,但如今也可用於測試給定版本的行爲與您爲部署考慮的設置的關係。

                          爲了使用此模式,您須要指定測試中的鍵的數量。您還須要爲maxmemory設置一個有意義值的做爲第一次嘗試。

                         重要注意事項:在Redis配置中配置maxmemory設置相當重要:若是沒有最大內存使用量上限,則因爲全部鍵都可存儲在內存中,所以命中率最終將爲100%。 或者,若是您指定的鍵太多而沒有最大內存,則最終將使用全部計算機RAM。 還須要配置適當的maxmemory策略,大部分時間是allkeys-lru。


                          在如下示例中,我配置了最大內存限制是100MB,並使用1000萬個鍵對LRU進行了模擬。

                         警告:測試使用流水線並會給服務器帶來壓力,請勿將其用於生產實例。

                    [root@linux redis]# redis-cli -h 192.168.127.130 -p 6379 --lru-test 10000000
                    156000 Gets/sec | Hits: 4552 (2.92%) | Misses: 151448 (97.08%)
                    153750 Gets/sec | Hits: 12906 (8.39%) | Misses: 140844 (91.61%)
                    159250 Gets/sec | Hits: 21811 (13.70%) | Misses: 137439 (86.30%)
                    151000 Gets/sec | Hits: 27615 (18.29%) | Misses: 123385 (81.71%)
                    145000 Gets/sec | Hits: 32791 (22.61%) | Misses: 112209 (77.39%)
                    157750 Gets/sec | Hits: 42178 (26.74%) | Misses: 115572 (73.26%)
                    154500 Gets/sec | Hits: 47418 (30.69%) | Misses: 107082 (69.31%)
                    151250 Gets/sec | Hits: 51636 (34.14%) | Misses: 99614 (65.86%)


                         該程序每秒顯示統計信息。 如您所見,在第一秒鐘內緩存開始被填充。 丟失率稍後穩定在咱們能夠預期的實際數字中:

                    120750 Gets/sec | Hits: 48774 (40.39%) | Misses: 71976 (59.61%)
                    122500 Gets/sec | Hits: 49052 (40.04%) | Misses: 73448 (59.96%)
                    127000 Gets/sec | Hits: 50870 (40.06%) | Misses: 76130 (59.94%)
                    124250 Gets/sec | Hits: 50147 (40.36%) | Misses: 74103 (59.64%)


                         對於咱們的用例來講,59%的丟失率多是不可接受的。因此咱們知道100MB內存是不夠的。讓咱們試試500MB字節。幾分鐘後,咱們會看到輸出穩定到如下數字:

                    140000 Gets/sec | Hits: 135376 (96.70%) | Misses: 4624 (3.30%)
                    141250 Gets/sec | Hits: 136523 (96.65%) | Misses: 4727 (3.35%)
                    140250 Gets/sec | Hits: 135457 (96.58%) | Misses: 4793 (3.42%)
                    140500 Gets/sec | Hits: 135947 (96.76%) | Misses: 4553 (3.24%)

           
                        所以咱們知道在500MB的狀況下,咱們的鍵數量支持足夠多(1000萬)和分佈也很合理(80-20方式)。


3、總結          好了,今天就寫到這裏了,終於把redis-cli的使用細節寫完了,翻譯起來也挺耗時間的,有的時候可能翻譯的不許確,也請你們指出。繼續努力,不能鬆懈。若是想看原文,地址以下:https://redis.io/topics/rediscli。

相關文章
相關標籤/搜索