Redis進階實踐之十四 Redis-cli命令行工具使用詳解第一部分


一、介紹

       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的分隔參數執行的命令一樣簡單:

        $ redis-cli -h 192.168.127.130 -p 6379 incr mycounter
        (integer) 7

            該命令的結果是“7”。 由於Redis的結果是強類型的(它們可以是字符串,數組,整數,NULL,錯誤等等),您可以看到括號之間的就是結果的類型。 但是,當redis-cli的輸出必須用作另一個命令的輸入,或者我們希望將它重定向到一個文件時,這並不是一個好的做法。

           實際上,redis-cli當檢測到標准輸出是一個tty設備時就會來顯示這些附加信息以幫助提高人們的可讀性。 否則,它將通過 auto-enable 啟用原始輸出模式,如下例所示:

        $ redis-cli -h 192.168.127.130 -p 6379 incr mycounter > /tmp/output.txt
        $ cat /tmp/output.txt
        8


           由於CLI檢測到輸出不再寫入終端,因此這次輸出中才省略了(整數)這個顯示。 你甚至可以在終端上用--raw選項強制原始輸出:

        $ redis-cli -h 192.168.127.130 -p 6379 --raw incr mycounter
        9


           同樣,通過使用--no-raw,可以在寫入文件或將管道傳送到其他命令時強制讀取可讀的輸出。


    3、主機,端口,密碼和數據庫

           默認情況下,redis-cli在127.0.0.1端口6379連接到服務器。正如您所猜測的,您可以使用命令行選項輕松更改此設置。 要指定不同的主機名或IP地址,請使用-h。 為了設置不同的端口,請使用-p。

        $ redis-cli -h 192.168.127.130 -p 6379 ping
        PONG


           如果您的實例受密碼保護,-a <密碼>選項將執行身份驗證,以保證明確使用AUTH命令的需要:

        $ redis-cli -h 192.168.127.130 -p 6379 -a myUnguessablePazzzzzword123 ping
        PONG


           最后,可以通過使用-n <dbnum>選項發送一個命令,該命令對除默認數字零以外的數據庫號進行操作:

        $ redis-cli -h 192.168.127.130 -p 6379 flushall
        OK

        $ redis-cli -h 192.168.127.130 -p 6379 -n 1 incr a
        (integer) 1

        $ redis-cli -h 192.168.127.130 -p 6379 -n 1 incr a
        (integer) 2

        $ redis-cli -h 192.168.127.130 -p 6379 -n 2 incr a
        (integer) 1


           部分或全部信息也可以通過使用-u <uri>選項和一個有效的URI來提供:

        $ redis-cli -u redis://p%40ssw0rd@redis-16379.hosted.com:16379/0 ping
        PONG



    4、從其他程序獲取輸入

           有兩種方法可以使用redis-cli來獲取來自其他命令的輸入(基本上來自標准輸入)。 一種是使用我們從標准輸入讀取的有效數據作為最后一個參數。 例如,假設在我的電腦里,為了將Redis的key設置到文件/etc/services的內容里,我可以使用-x選項:

        $ redis-cli -h 192.168.127.130 -p 6379 -x set foo < /etc/services
        OK
        $ redis-cli -h 192.168.127.130 -p 6379 getrange foo 0 50
        "#\n# Network services, Internet style\n#\n# Note that "


           正如您在上述會話的第一行中看到的那樣,SET命令的最后一個參數未被指定。 參數只是SET foo,並沒有為我希望的key設置的實際的值。

           相反,指定了-x選項,並將文件重定向到CLI的標准輸入。所以輸入被讀取,並被用作命令的最后一個參數。這對編寫腳本很有用。

           另一種不同的方法是為redis-cli提供一個寫在文本文件中的命令序列:

       $ cat /tmp/commands.txt
        set foo 100
        incr foo
        append foo xxx
        get foo

        $ cat /tmp/commands.txt | redis-cli -h 192.168.127.130 -p 6379
        OK
        (integer) 101
        (integer) 6
        "101xxx"

           command.txt中的所有命令都由redis-cli一個接一個地執行,就好像它們是由用戶交互式鍵入的一樣。 如果需要,可以在文件內使用雙引號來標識字符串,這樣在字符串中間就可以包含空格或換行符或其他特殊字符,但是此字符串是作為一個參數使用的:

        $ cat /tmp/commands.txt
        set foo "This is a single argument"
        strlen foo
        $ cat /tmp/commands.txt | redis-cli -h 192.168.127.130 -p 6379
        OK
        (integer) 25



    5、連續運行相同的命令

           在執行過程中,當用戶選擇暫停的情況下執行相同命令的指定次數是可行的。這在不同情況下很有用,例如,當我們想要持續監視一些 key 的內容或INFO字段輸出時,或者當我們想模擬一些重復寫入事件時(比如每5秒將一個新項目推入列表)。

           該功能由兩個選項控制:-r <count>和-i <delay>。 第一種選項表示運行命令的次數,第二種表示不同命令調用之間的延遲,以秒為單位(能夠指定十進制數字,如0.1表示100毫秒)。

           默認情況下,間隔(或延遲)被設置為0,所以命令只是盡快執行:

        $ redis-cli -h 192.168.127.130 -p 6379 -r 5 incr foo
        (integer) 1
        (integer) 2
        (integer) 3
        (integer) 4
        (integer) 5

           要長時間運行相同的命令,請使用-1作為計數。 因此,為了隨時監控RSS存儲器的大小,可以使用如下的命令:

        $ redis-cli -h 192.168.127.130 -p 6379  -r -1 -i 1 INFO | grep rss_human
        used_memory_rss_human:1.38M
        used_memory_rss_human:1.38M
        used_memory_rss_human:1.38M
        ... a new line will be printed each second ...



    6、使用redis-cli大量插入數據

          使用redis-cli進行大數據量插入會使用單獨的章節來說,因為它本身就是一個有價值的話題。請參閱我們的《批量插入指南》。


    7、CSV輸出

            有時候您可能想要使用redis-cli來快速將數據從Redis導出到外部程序。 這可以使用CSV(逗號分隔值)輸出功能來完成:

        $ redis-cli -h 192.168.127.130 -p 6379 lpush mylist a b c d
        (integer) 4

        $ redis-cli -h 192.168.127.130 -p 6379  --csv lrange mylist 0 -1
        "d","c","b","a"


             目前無法像這樣導出整個數據庫,但只能用CSV輸出運行單個命令。


    8、運行Lua腳本

           redis-cli對使用Lua腳本編寫的新Lua調試工具提供了廣泛的支持,穩定版本是從Redis 3.2開始。有關此功能,請參閱《Redis Lua調試器文檔》https://redis.io/topics/ldb。

           但是,即使不使用調試器,與以交互方式將腳本輸入到shell或作為參數相比,您可以使用redis-cli從文件運行腳本,這種方式更加舒適:

        $ cat /tmp/script.lua return redis.call('set',KEYS[1],ARGV[1])
        $ redis-cli -h 192.168.127.130 -p 6379 --eval /tmp/script.lua foo , bar
        OK

            Redis EVAL命令將腳本使用的鍵列表和其他非鍵參數作為不同的數組。在調用EVAL命令時,您可以將key的數量作為一個數字提供。 但是,使用redis-cli並使用上面的--eval選項,並沒有明確指定key的數量。相反,它使用用逗號分隔鍵和參數。這就是為什么在上面的調用中你看到foo,bar作為參數。

            所以foo會填充KEYS數組,bar會填充ARGV數組。

            編寫簡單腳本時,--eval選項很有用。對於更復雜的工作,使用Lua調試器肯定更適合。可以混合使用這兩種方法,因為調試器也使用來自外部文件的執行腳本。


    9、交互模式

            到目前為止,我們探討了如何使用Redis CLI作為命令行程序。 這對於腳本和某些類型的測試非常有用,但是大多數人的大部分時間將會使用redis-cli的交互模式。

            在交互模式下,用戶在提示符下鍵入Redis命令。該命令被發送到服務器,進行處理,回復被解析回來並呈現為更簡單的形式來閱讀。

           在交互模式下運行CLI不需要什么特別的東西 - 在沒有任何參數的情況下運行即可,並且您處於:

        $ redis-cli -h 192.168.127.139 -p 6379
        192.168.127.130:6379> ping
        PONG


            字符串192.168.127.130:6379>是提示符。它提醒您,您已連接到給定的Redis實例。
        
            當連接的服務器發生更改時,或者當您在與數據庫編號0不同的數據庫上運行時,提示會發生的更改:

        192.168.127.130:6379> select 2
        OK
        192.168.127.130:6379[2]> dbsize
        (integer) 1
        192.168.127.130:6379[2]> select 0
        OK
        192.168.127.130:6379> dbsize
        (integer) 503


        9.1、處理連接和重新連接

                在交互模式下使用connect命令可以通過指定我們要連接的主機名和端口來連接到不同的實例:

            192.168.127.130:6379> connect metal 6379
            metal:6379> ping
            PONG


               正如你所看到的以下的提示也會有相應的改變。如果用戶嘗試連接到無法訪問的實例,則redis-cli將進入斷開連接模式,並且准備使用新命令嘗試重新連接:

            192.168.127.130:6379> connect 192.168.127.130 9999
            Could not connect to Redis at 192.168.127.130:9999: Connection refused

            not connected> ping
            Could not connect to Redis at 192.168.127.130:9999: Connection refused

            not connected> ping
            Could not connect to Redis at 192.168.127.130:9999: Connection refused


               通常在檢測到斷開連接后,CLI始終嘗試以透明方式重新連接:如果嘗試失敗,則會顯示錯誤並進入斷開連接狀態。 以下是斷開和重新連接的示例:

            192.168.127.130:6379> debug restart
            Could not connect to Redis at 192.168.127.130:6379: Connection refused
            not connected> ping
            PONG
            192.168.127.130:6379> (now we are connected again)


                 當執行重新連接時,redis-cli會自動重新選擇所選的上一個數據庫編號。然而,關於連接的所有其他狀態都會丟失,例如,事務的狀態信息就會丟失,當我們處於事務的執行過程中的時候:

            $ redis-cli -h 192.168.127.130 -p 6379
            192.168.127.130:6379> multi
            OK

            192.168.127.130:6379> ping
            QUEUED

            ( here the server is manually restarted )

            192.168.127.130:6379> exec
            (error) ERR EXEC without MULTI


               在交互模式下使用CLI進行測試時,這通常不是問題,但您應該了解這一限制。


        9.2、編輯,歷史和完成

                由於redis-cli使用《linenoise行編輯庫》,因此它一直具有行編輯功能,而不依賴於libreadline或其他可選庫。

                您可以訪問已執行的命令的歷史記錄,以便通過按方向鍵(上和下)來避免重復鍵入它們。在用戶主目錄內的一個名為.rediscli_history的文件中,指定HOME環境變量,在重新啟動CLI的時候保留歷史記錄。  可以通過設置 REDISCLI_HISTFILE 環境變量來使用不同的歷史文件名,並通過將其設置為 /dev/null 來禁用它。

                CLI客戶端還能夠通過按TAB鍵執行命令名稱的補全操作,<TAB>表示按TAB鍵,如下例所示:

            192.168.127.130:6379> Z<TAB>
            192.168.127.130:6379> ZADD<TAB>
            192.168.127.130:6379> ZCARD<TAB>


        9.3、運行相同的命令N次

                可以通過在命令名前添加一個數字來多次運行相同的命令:

            192.168.127.130:6379> 5 incr mycounter
            (integer) 1
            (integer) 2
            (integer) 3
            (integer) 4
            (integer) 5



        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命令的幫助,使用:

            192.168.127.130:6379> help PFADD

             PFADD key element [element ...]
             summary: Adds the specified elements to the specified HyperLogLog.
             since: 2.8.9
             group: hyperloglog


                  PFADD key element [element ...]
                  摘要:將指定的元素添加到指定的HyperLogLog。
                  從版本:2.8.9

                  請注意,幫助也支持TAB補全功能。


        9.5、清除終端屏幕

            在交互模式下使用 clear 命令將清除終端屏幕。

        后面還有很多高級內容,就放在下篇文章里面了。

三、總結

         好了,今天就寫到這里了,剩下還有很多高級的內容需要些,慢慢來,一口不能吃一個胖子,而且翻譯起來也挺耗時間的。剩下的內容就留到下一篇文章吧。繼續努力,不能松懈。如果想看原文,地址如下:https://redis.io/topics/rediscli。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM