一、介紹
二、使用詳解
上篇文章寫到第9個小節,今天直接按着以上的序号,繼續來寫
10、特殊的操作模式
到目前為止,我們看到了redis-cli的兩種主要模式。
1、指令行執行Redis指令。
2、互動式的“REPL-like”用法。
然而,CLI執行與Redis相關的其他輔助任務,這些任務将在下一節中介紹:
1、監控工具顯示有關Redis伺服器的連續統計資訊。
2、掃描Redis資料庫查找非常大的key。
3、與模式比對的key空間掃描器。
4、作為Pub/Sub客戶訂閱頻道。
5、監視Redis執行個體中執行的指令。
6、以不同方式檢查Redis伺服器的延遲。
7、檢查本地計算機的排程程式延遲。
8、從遠端Redis伺服器傳輸RDB備份到本地。
9、扮演Redis從節點的角色,展現從節點所接受的東西。
10、模拟LRU工作負載以顯示有關按鍵命中的統計資訊。
11、Lua調試器的用戶端。
10.1、連續統計模式
這可能是redis-cli的最不常用的功能之一,并且對于實時監控Redis執行個體來說是非常有用。要啟用此模式,使用--stat選項。 在這種模式下,CLI的行為非常清晰的:
在這種模式下,每秒都會列印一條新的資料行,其中包含有用資訊和舊資料點之間的差異。 您可以輕松了解記憶體使用情況,用戶端的連結等情況。
在這種情況下,-i <interval>選項的作用就是修改輸出新資料行的頻率。 預設值是一秒。
10.2、大鍵掃描
在這種特殊模式下,redis-cli可用作key空間容量大小的分析器。 它掃描占據比較大空間的key的資料集合,并能提供有關資料集組成的資料類型的資訊。 該模式使用--bigkeys 選項啟用,并生成十分詳細的輸出:
在輸出的第一部分中,報告每個大于前一個較大鍵(相同類型)的新鍵。 摘要部分提供有關Redis執行個體内資料的一般統計資訊。
該程式使用 SCAN 指令,是以它可以在不影響用戶端操作的情況下在繁忙的伺服器上執行,不過也可以使用-i選項來限制所請求的每100個鍵的掃描過程的秒數。 例如,-i 0.1會減慢程式的執行速度,但也會大幅減輕伺服器上的負載。
請注意,摘要還會以更清晰的形式反映每次發現的最大鍵。 如果針對一個非常大的資料集運作,最初的輸出隻是提供一些有趣的資訊ASAP。
10.3、擷取鍵的清單
還可以掃描密鑰空間,再次以不阻塞Redis伺服器的方式(當您使用諸如 KEYS * 之類的指令時會發生這種情況),并列印所有鍵的名稱,或者使用特定模式進行過濾。 此模式與 --bigkeys 選項一樣,使用SCAN指令,如果資料集正在發生更改,鍵就可能會多次反映更改,但如果從疊代開始以來就存在該鍵,那麼該鍵也不會丢失。由于它使用這個選項的指令叫做--scan。
請注意,使用 head -8 僅用于列印輸出所有資料的前8行。
scan指令可以配合 --pattern 選項使用模式比對進行掃描
根據鍵的名稱,通過使用wc指令可以使管道輸出針對特定種類對象的計數:
wc -l 這個選項的 -l,橫杠後面是英文字母 L 的小寫,不是數字 1。
10.4、釋出/訂閱模式
隻需使用PUBLISH指令,CLI就能夠在 Redis Pub/Sub通道中釋出消息。這是預期的,因為PUBLISH指令與其他任何指令非常相似,使用簡單。訂閱頻道為了接收消息使用了特殊的方法 - 在這種情況下,我們需要阻止和等待消息,此方法是作為redis-cli中的特殊模式實作的。 與其他特殊模式不同,此模式不是通過使用特殊選項啟用的,而是通過使用SUBSCRIBE或PSUBSCRIBE指令啟用的,無論是互動模式還是非互動模式:
’*’ 帶有單引号的星号表示非系統釋出的消息通道,可以接受來自任何使用者定義通道的資訊,當然也可以輸入具體名稱的通道,比如:mychannel,我們針對具體名稱的通道釋出資訊,必須制定通道名稱,否則無效。
* 單獨星号,沒有單引号包含的,會顯示系統目前所有釋出的通道,如下:
閱讀消息,消息顯示我們輸入了 Pub/Sub 模式。 當其他用戶端在某個頻道釋出某條消息時(例如,您可以使用redis-cli PUBLISH mychannel mymessage),Pub/Sub模式中的CLI将顯示如下内容:
這對調試 釋出/訂閱 的問題非常有用。要退出釋出/訂閱模式隻需處理CTRL-C。
10.5、監視在Redis中執行的指令
與 Pub/Sub 模式類似,使用MONITOR模式後,将自動輸入監控模式。它将列印Redis執行個體收到的所有指令:
請注意,可以使用管道輸出,是以您可以使用諸如grep等工具監視特定模式。
10.6、 監視Redis執行個體的延遲
Redis經常用于延遲非常嚴重的環境中。延遲涉及應用程式中的多個動态的部分,從用戶端庫到網絡堆棧,再到Redis執行個體本身。
CLI有多種功能用于研究Redis執行個體的延遲并了解延遲的最大值,平均值和分布。
基本的延遲檢查工具是 --latency 選項。 使用此選項,CLI運作一個循環,将PING指令發送到Redis執行個體,并測量獲得答複的時間。這種情況每秒發生100次,統計資訊在控制台中實時更新:
統計資料以毫秒計數。通常情況下,由于系統核心排程程式運作redis-cli本身所導緻的延遲,是以一個非常快的執行個體的平均延遲往往被高估了一點,是以0.19以上的平均延遲可能是0.01或更少。然而,這通常不是一個大問題,因為我們對幾毫秒或更長時間的事件才感興趣。
有時候,研究平均延遲期的最大值和平均值如何随時間發展是有用的。--latency-history選項用于此目的:它的工作方式與--latency完全相同,但每15秒(預設情況下)一個全新的采樣會話從頭開始:
您可以使用-i <interval>選項更改采樣會話的時間間隔步長。
最先進的延遲研究工具,對于沒有經驗的使用者來說也有點難解釋明白,是以使用彩色終端顯示一系列延遲是一種能力。您将看到一個彩色輸出,訓示不同樣本的百分比,以及不同的ASCII字元表示不同的延遲數字。 使用 --latency-dist 選項啟用此模式:
在redis-cli中還有另一個非常不尋常的延遲工具。它不會檢查Redis執行個體的延遲,而是檢查運作redis-cli的計算機的延遲。你可能會問什麼延遲? 核心排程程式固有的延遲,管理虛拟化執行個體的程式的延遲等等。
我們稱之為内部延遲,因為它對大多數程式員來說是不透明的。 如果您的Redis執行個體延遲不佳,任何微不足道的事情都有可能是造成延遲的罪魁禍首,那麼通過在運作Redis伺服器的系統中直接在此特殊模式下運作redis-cli,可以檢查系統的最佳性能。
通過測量内部延遲,您知道這是基準,Redis無法超越您的系統。為了在此模式下運作CLI,請使用--intrinsic-latency <test-time>。 測試的時間以秒為機關,并指定redis-cli多少秒可以檢查一次目前正在運作的系統的延遲。
重要提示:必須在要運作Redis伺服器的計算機上執行此指令,而不是在不同的主機上執行此指令。 它甚至不連接配接到Redis執行個體,隻在本地執行測試。
在上述情況下,我的系統不可能比最糟延遲2107微秒的情況更好,是以我可以期望某些查詢在不到1毫秒的時間内運作。
10.7、遠端備份RDB檔案
在Redis複制的第一次同步期間,主裝置和從裝置以RDB檔案的形式交換整個資料集。redis-cli利用此功能來提供遠端備份功能,該功能允許将RDB檔案從任何Redis執行個體傳輸到運作redis-cli的本地計算機。要使用此模式,請使用--rdb <dest-filename>選項調用CLI:
這是確定您擁有Redis執行個體的災難恢複RDB備份檔案的簡單而有效的方法。 但是,在腳本或cron作業中使用此選項時,請確定檢查指令的傳回值。如果它不為零,則發生錯誤,如下例所示:
10.8、從模式
CLI的從屬模式是一種進階功能,可用于Redis開發人員和調試操作。它允許檢查主站發送到複制流中的從站以便将寫入傳播到其副本。選項名稱簡單--slave。示例代碼如下:
該指令首先丢棄第一個同步的RDB檔案,然後以CSV格式記錄每個收到的指令。
如果您認為某些指令未在您的從站中正确複制,這也是檢查發生了什麼事情的好方法,對于改進錯誤報告也是有用的資訊。
10.9、執行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進行了模拟。
警告:測試使用流水線并會給伺服器帶來壓力,請勿将其用于生産執行個體。
該程式每秒顯示統計資訊。 如您所見,在第一秒鐘内緩存開始被填充。 丢失率稍後穩定在我們可以預期的實際數字中:
對于我們的用例來說,59%的丢失率可能是不可接受的。是以我們知道100MB記憶體是不夠的。讓我們試試500MB位元組。幾分鐘後,我們會看到輸出穩定到以下數字:
是以我們知道在500MB的情況下,我們的鍵數量支援足夠多(1000萬)和分布也很合理(80-20方式)。
三、總結
好了,今天就寫到這裡了,終于把redis-cli的使用細節寫完了,翻譯起來也挺耗時間的,有的時候可能翻譯的不準确,也請大家指出。繼續努力,不能松懈。如果想看原文,位址如下:https://redis.io/topics/rediscli。