一、介紹
redis學了有一段時間了,以前都是看視訊,看教程,很少看官方的東西。現在redis的東西要看的都差不多看完了。網上的東西也不多了。剩下來就看看官網的東西吧,一遍翻譯,一遍測試。不錯的使用體驗,今天開始就寫一下redis的用戶端的使用,也就是redis-cli工具類,這個檔案的内容真不少,一次寫完有點吃力。分多次寫吧。
二、使用詳解
1、redis-cli,Redis指令行界面
redis-cli是Redis指令行界面,它是一個允許向Redis發送指令、并直接從終端讀取伺服器發送的回複的簡單的程式。
它有兩種主要模式:一種互動模式,其中有一個REPL(讀取評估列印循環),使用者輸入指令并擷取回複;另一種模式是将指令作為redis-cli的參數發送,執行并列印在标準輸出中。
在互動模式下,redis-cli具有基本的行編輯功能,可以提供良好的打字型驗。
然而,redis-cli不僅僅具有以上功能,還有更進階的用法。有些選項可用來啟動程式并将其置于特殊模式之下,以便redis-cli可以完成更複雜的任務,如模拟從站并列印從主站接收到的複制流,檢查Redis伺服器的延遲,并顯示統計資料,甚至是延時采樣和頻率的ASCII-art頻譜圖,以及其他許多事情。
本指南将涵蓋redis-cli的不同方面,從最簡單到最進階的結尾。
如果您要廣泛使用Redis,或者您已經這麼做了,那麼很可能會碰巧使用redis-cli。 花一些時間熟悉它可能是一個非常好的主意,一旦你知道了指令行界面的所有技巧,你就會更有效地使用Redis。
2、指令行的用法
隻需運作一個指令并在标準輸出上列印其答複就如同輸入要作為redis-cli的分隔參數執行的指令一樣簡單:
該指令的結果是“7”。 由于Redis的結果是強類型的(它們可以是字元串,數組,整數,NULL,錯誤等等),您可以看到括号之間的就是結果的類型。 但是,當redis-cli的輸出必須用作另一個指令的輸入,或者我們希望将它重定向到一個檔案時,這并不是一個好的做法。
實際上,redis-cli當檢測到标準輸出是一個tty裝置時就會來顯示這些附加資訊以幫助提高人們的可讀性。 否則,它将通過 auto-enable 啟用原始輸出模式,如下例所示:
由于CLI檢測到輸出不再寫入終端,是以這次輸出中才省略了(整數)這個顯示。 你甚至可以在終端上用--raw選項強制原始輸出:
同樣,通過使用--no-raw,可以在寫入檔案或将管道傳送到其他指令時強制讀取可讀的輸出。
3、主機,端口,密碼和資料庫
預設情況下,redis-cli在127.0.0.1端口6379連接配接到伺服器。正如您所猜測的,您可以使用指令行選項輕松更改此設定。 要指定不同的主機名或IP位址,請使用-h。 為了設定不同的端口,請使用-p。
如果您的執行個體受密碼保護,-a <密碼>選項将執行身份驗證,以保證明确使用AUTH指令的需要:
最後,可以通過使用-n <dbnum>選項發送一個指令,該指令對除預設數字零以外的資料庫号進行操作:
部分或全部資訊也可以通過使用-u <uri>選項和一個有效的URI來提供:
4、從其他程式擷取輸入
有兩種方法可以使用redis-cli來擷取來自其他指令的輸入(基本上來自标準輸入)。 一種是使用我們從标準輸入讀取的有效資料作為最後一個參數。 例如,假設在我的電腦裡,為了将Redis的key設定到檔案/etc/services的内容裡,我可以使用-x選項:
正如您在上述會話的第一行中看到的那樣,SET指令的最後一個參數未被指定。 參數隻是SET foo,并沒有為我希望的key設定的實際的值。
相反,指定了-x選項,并将檔案重定向到CLI的标準輸入。是以輸入被讀取,并被用作指令的最後一個參數。這對編寫腳本很有用。
另一種不同的方法是為redis-cli提供一個寫在文本檔案中的指令序列:
command.txt中的所有指令都由redis-cli一個接一個地執行,就好像它們是由使用者互動式鍵入的一樣。 如果需要,可以在檔案内使用雙引号來辨別字元串,這樣在字元串中間就可以包含空格或換行符或其他特殊字元,但是此字元串是作為一個參數使用的:
5、連續運作相同的指令
在執行過程中,當使用者選擇暫停的情況下執行相同指令的指定次數是可行的。這在不同情況下很有用,例如,當我們想要持續監視一些 key 的内容或INFO字段輸出時,或者當我們想模拟一些重複寫入事件時(比如每5秒将一個新項目推入清單)。
該功能由兩個選項控制:-r <count>和-i <delay>。 第一種選項表示運作指令的次數,第二種表示不同指令調用之間的延遲,以秒為機關(能夠指定十進制數字,如0.1表示100毫秒)。
預設情況下,間隔(或延遲)被設定為0,是以指令隻是盡快執行:
要長時間運作相同的指令,請使用-1作為計數。 是以,為了随時監控RSS存儲器的大小,可以使用如下的指令:
6、使用redis-cli大量插入資料
7、CSV輸出
有時候您可能想要使用redis-cli來快速将資料從Redis導出到外部程式。 這可以使用CSV(逗号分隔值)輸出功能來完成:
目前無法像這樣導出整個資料庫,但隻能用CSV輸出運作單個指令。
8、運作Lua腳本
redis-cli對使用Lua腳本編寫的新Lua調試工具提供了廣泛的支援,穩定版本是從Redis 3.2開始。有關此功能,請參閱《Redis Lua調試器文檔》https://redis.io/topics/ldb。
但是,即使不使用調試器,與以互動方式将腳本輸入到shell或作為參數相比,您可以使用redis-cli從檔案運作腳本,這種方式更加舒适:
Redis EVAL指令将腳本使用的鍵清單和其他非鍵參數作為不同的數組。在調用EVAL指令時,您可以将key的數量作為一個數字提供。 但是,使用redis-cli并使用上面的--eval選項,并沒有明确指定key的數量。相反,它使用用逗号分隔鍵和參數。這就是為什麼在上面的調用中你看到foo,bar作為參數。
是以foo會填充KEYS數組,bar會填充ARGV數組。
編寫簡單腳本時,--eval選項很有用。對于更複雜的工作,使用Lua調試器肯定更适合。可以混合使用這兩種方法,因為調試器也使用來自外部檔案的執行腳本。
9、互動模式
到目前為止,我們探讨了如何使用Redis CLI作為指令行程式。 這對于腳本和某些類型的測試非常有用,但是大多數人的大部分時間将會使用redis-cli的互動模式。
在互動模式下,使用者在提示符下鍵入Redis指令。該指令被發送到伺服器,進行處理,回複被解析回來并呈現為更簡單的形式來閱讀。
在互動模式下運作CLI不需要什麼特别的東西 - 在沒有任何參數的情況下運作即可,并且您處于:
字元串192.168.127.130:6379>是提示符。它提醒您,您已連接配接到給定的Redis執行個體。
當連接配接的伺服器發生更改時,或者當您在與資料庫編号0不同的資料庫上運作時,提示會發生的更改:
9.1、處理連接配接和重新連接配接
在互動模式下使用connect指令可以通過指定我們要連接配接的主機名和端口來連接配接到不同的執行個體:
正如你所看到的以下的提示也會有相應的改變。如果使用者嘗試連接配接到無法通路的執行個體,則redis-cli将進入斷開連接配接模式,并且準備使用新指令嘗試重新連接配接:
通常在檢測到斷開連接配接後,CLI始終嘗試以透明方式重新連接配接:如果嘗試失敗,則會顯示錯誤并進入斷開連接配接狀态。 以下是斷開和重新連接配接的示例:
當執行重新連接配接時,redis-cli會自動重新選擇所選的上一個資料庫編号。然而,關于連接配接的所有其他狀态都會丢失,例如,事務的狀态資訊就會丢失,當我們處于事務的執行過程中的時候:
在互動模式下使用CLI進行測試時,這通常不是問題,但您應該了解這一限制。
9.2、編輯,曆史和完成
由于redis-cli使用《linenoise行編輯庫》,是以它一直具有行編輯功能,而不依賴于libreadline或其他可選庫。
您可以通路已執行的指令的曆史記錄,以便通過按方向鍵(上和下)來避免重複鍵入它們。在使用者主目錄内的一個名為.rediscli_history的檔案中,指定HOME環境變量,在重新啟動CLI的時候保留曆史記錄。 可以通過設定 REDISCLI_HISTFILE 環境變量來使用不同的曆史檔案名,并通過将其設定為 /dev/null 來禁用它。
CLI用戶端還能夠通過按TAB鍵執行指令名稱的補全操作,<TAB>表示按TAB鍵,如下例所示:
9.3、運作相同的指令N次
可以通過在指令名前添加一個數字來多次運作相同的指令:
9.4、顯示有關Redis指令的幫助
Redis有很多指令,有時候,當你測試的時候,你可能不記得參數的确切順序。redis-cli使用help指令為大多數Redis指令提供聯機幫助。 該指令可以以兩種形式使用:
1、help @ <category>顯示關于給定類别的所有指令。 類别包括:@generic,@list,@set,@sorted_set,@hash,@pubsub,@transactions,@connection,@server,@scripting,@hyperloglog。
2、help <commandname>顯示作為參數給出的指令的特定幫助。
例如,為了顯示PFADD指令的幫助,使用:
PFADD key element [element ...]
摘要:将指定的元素添加到指定的HyperLogLog。
從版本:2.8.9
請注意,幫助也支援TAB補全功能。
9.5、清除終端螢幕
在互動模式下使用 clear 指令将清除終端螢幕。
後面還有很多進階内容,就放在下篇文章裡面了。
三、總結