redis-cli
--Redis
命令行接口redis
是一個簡單的命令行接口程序,他容許你在終端直接向Redis
發送命令,而且讀取Redis
返回的數據。redis
它有兩種模式:shell
- 交互模式(`REPL`):用戶輸入命令,獲取結果。 - 參數模式:命令做爲`redis-cli`的參數傳輸,執行,而且以標準輸出流輸出
在交互模式中,redis-cli的只能提示提供了一個很是好的輸入體驗。數據庫
然而,redis-cli
不只僅能作到這樣,它有很是多的選項讓你選擇,能夠經過不一樣的選項讓他進入某種特殊的模式。因此,redis-cli
確定是能夠作很是複雜的任務的,好比模擬master
複製到slave
的數據同步,而且將同步流點出來。檢查Redis
服務端的潛在危險而且做出統計,設置能夠以ASCII-art
形式顯示潛在危險案例和機率,初次以外還有許多功能。數組
這個指南將會從最簡單的特性開始,而且以將會以高級特性結束,覆蓋了redis-cli
各個不一樣的方面。app
若是你想普遍使用Redis
,又或者你已經在這麼作了,那麼這篇文章將有很大的可能讓你獲得這種機會。花一些時間熟悉這些特性多是一個很是好的注意,若是你知道redis-cli
命令行接口訣竅,你將會看到如何更有效的使用Redis。lua
將命令當作redis-cli
分離的參數來執行命令很是的簡單,同時它能夠在屏幕上以標準輸出命令執行的結果命令行
$ redis-cli incr mycounter (integer) 7
命令的返回值是7
,由於Redis
的返回值是類型化的(strings
、arrays
、integers
、NULL
、errors
等),你將會在返回結果中看到類型,他們在兩個括號之間,因此講Redis的返回值做爲另外一個命令的輸入值不是一個好主意,除非咱們想將結果重定向到文件中。調試
一般狀況下,redis-cli
若是在ttf
模式中,將會顯示一些而外的消息,以加強閱讀性。在其餘模式中,將會自動使用原始輸出,就像接下來的例子code
$ redis-cli incr mycounter > ./output $ cat ./output 2
此時,(integer)
將會被忽略,由於redis-cli
發現並非在終端上輸出,固然,咱們也能夠強制在終端上直接顯示原始信息,使用--raw
參數接口
$ redis-cli --raw incr mycounter 3
同理,你能夠強制在輸入文件或者其餘管道中啓用加強模式,使用--no-raw
$ redis-cli --no-raw incr mycounter > ./output FollowWinter:~ FollowWinter$ cat output (integer) 4
默認狀況下,redis-cli
連接的服務端主機地址是127.0.0.1:6379
,就像你想的那樣,經過命令行,你能夠簡單的修改這些參數,去指定一個不一樣的主機名字或者IP
,使用-h
,指定不一樣的端口,使用-p
。
$ redis-cli -h redis15.localnet.org -p 6390 ping PONG
若是你的實例是受密碼保護的,-a <password>
選項將會實現認證,明企鵝不須要再顯示的調用AUTH命令。
$ redis-cli -a myUnguessablePazzzzzword123 ping PONG
最後,不使用默認的0號數據庫而使用其餘數據庫也是可能的,可使用 -n <dbnum>
選項:
$ redis-cli flushall OK $ redis-cli -n 1 incr a (integer) 1 $ redis-cli -n 1 incr a (integer) 2 $ redis-cli -n 2 incr a (integer) 1
這些信息也能夠以URI
的形式給出,使用 -u <uri>
選項
$ redis-cli -u redis://p%40ssw0rd@redis-16379.hosted.com:16379/0 ping PONG
有兩種方式能夠從其餘程序獲取數據(通常從標準輸入)。一種方式是將從標準輸入讀取的數據裝載到redis-cli
的最後一個選項。好比,我想將我電腦上的/etc/services
文件內容做爲一個key
的值,我可使用-x選項:
$ redis-cli -x set foo < /etc/services OK $ redis-cli getrange foo 0 50 "#\n# Network services, Internet style\n#\n# Note that "
就想你再上面的對話中的第一行看到的,SET
命令的最後一個選項並無指定。這個參數並無直接把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 OK (integer) 101 (integer) 6 "101xxx"
全部在這個文件中的命將會一個接着一個的執行,就像是用戶輸入同樣。字符串在必要的時候,可使用引號包裹,因此可使用特殊的符號,好比空格、換行或者其餘特殊字符:
$ cat /tmp/commands.txt set foo "This is a single argument" strlen foo $ cat /tmp/commands.txt | redis-cli OK (integer) 25
在執行時用戶連續屢次執行相同的命令是頗有可能的。在不一樣的上下文中,這是很是有用的,好比當咱們須要連續監控一些key
的內容或者輸出內容,或者咱們須要模擬一些重複寫入事件(好比每5s向一個list
推入數據)
這個特性受控於兩個選項:-r <count>
和-i <delay>
。第一個標明要執行多少次,第二個配置兩次命令執行的延遲事件,單位是秒(可是也能夠指定像0.1
這樣的小數,用來表示100
毫秒)。
默認延遲是0
,因此命令會盡量快的執行
$ redis-cli -r 5 incr foo (integer) 1 (integer) 2 (integer) 3 (integer) 4 (integer) 5
若是要永遠執行某個命令,count選項值爲-1,若是爲了一直監控RSS的內存大小,或許能夠這樣使用命令:
$ redis-cli -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 ...
redis-cli
插入混合的數據使用redis-cli
插入混合的數據是一個重要的課題,將會在獨立的文章說明,請閱讀混合數據插入指南
有時候,你須要使用redis-cli
快速的導出Redis
中的數據給其餘程序使用,可使用CSV
輸出特性:
$ redis-cli lpush mylist a b c d (integer) 4 $ redis-cli --csv lrange mylist 0 -1 "d","c","b","a"
此時不可能把整個數據項這樣導出,可是隻有一個簡單的命令就能夠作到導出數據到csv
文件。
lua
腳本從Redis 3.2
開始,咱們就普遍的支持使用新的Lua
調試器來調試和編寫Lua
腳本,關於這個特性,能夠查閱Redis Lua 調試文檔。
然而,就算沒有使用調試器,你也可使用redis-cli
從一個文件執行腳本,比在shell
交互中輸入腳本或者做爲參數舒服多了
$ cat /tmp/script.lua return redis.call('set',KEYS[1],ARGV[1]) $ redis-cli --eval /tmp/script.lua foo , bar OK
Redis
的EVAL
命令攜帶了腳本須要用到的key
,另外一個卻沒有key
參數,當調用EVAL
的時候,你以數字的方式提供了一個key
的數字。然而在前面redis-cli
使用--eval
選項的時候,不須要特地指定key
的序號。它性慣性的使用逗號分隔的key
序列做爲替代。這就是爲何你再前面看到foo, bar
做爲參數。
因此 foo
將會由KSYS
數組組成,bar
由ARGV
數組組成
So foo will populate the KEYS array, and bar the ARGV array.
--eval
選項在編寫簡單腳本的時候特別有用。其餘複雜的工做,使用Lua
調試器將會更加溫馨,這兩種方式能夠混合使用,由於調試器也是執行外部腳本文件。