redis中redis-cli使用小結(jié)
redis-cli 是Redis命令行界面,一個簡單的程序,允許直接從終端向Redis發(fā)送命令,并讀取服務(wù)器發(fā)送的回復(fù)。
- redis數(shù)據(jù)庫對命令大小寫不敏感,ping、Ping、PING是同一個命令
- redis數(shù)據(jù)庫對變量大小寫敏感,A、a是兩個變量
兩種模式
它有兩種主要模式:
- 一種交互模式,其中有一個 REPL(讀取評估打印循環(huán)),用戶可以在其中鍵入命令并獲得回復(fù);
- 另一種模式,其中命令作為 的參數(shù)發(fā)送redis-cli、執(zhí)行并打印在標準輸出上
在交互模式下,redis-cli具有基本的行編輯功能,提供良好的打字體驗。
命令行使用
方法:
$ redis-cli incr mycounter (integer) 7
命令的回復(fù)是“7”。由于 Redis 回復(fù)是類型化的(它們可以是字符串、數(shù)組、整數(shù)、NULL、錯誤等),您會在括號中看到回復(fù)的類型。
然而,當redis-cli必須將的輸出用作另一個命令的輸入時,或者當我們想要將其重定向到文件時,這并不是一個好主意。
實際上redis-cli只顯示附加信息,當它檢測到標準輸出是一個 tty(基本上是一個終端)時,可以提高人類的可讀性。否則它將自動啟用原始輸出模式,如方法2所示
方法2
$ redis-cli incr mycounter > /tmp/output.txt $ cat /tmp/output.txt 8
(integer)由于 CLI 檢測到輸出不再寫入終端,因此輸出中省略了該時間。您甚至可以使用以下–raw選項在終端上強制原始輸出,如方法3所示
方法3
$ redis-cli --raw incr mycounter 9
類似地,您可以使用–no-raw.
主機、端口、密碼和數(shù)據(jù)庫
- 默認情況下redis-cli,通過127.0.0.1 端口 6379 連接到服務(wù)器。
- 可以使用命令行選項輕松更改此設(shè)置。要指定不同的主機名或 IP 地址,請使用-h. 要設(shè)置不同的端口,請使用-p.
$ redis-cli -h redis15.localnet.org -p 6390 ping PONG
- 如果您的實例受密碼保護,該
-a <password>
選項將執(zhí)行身份驗證,從而無需顯式使用AUTH命令:
$ redis-cli -a myUnguessablePazzzzzword123 ping PONG
- 最后,可以使用以下
-n <dbnum>
選項發(fā)送對數(shù)據(jù)庫編號而不是默認編號零進行操作的命令:
$ 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
- 也可以通過使用
-u <uri>
選項和有效的 URI來提供部分或全部信息:
$ redis-cli -u redis://p%40ssw0rd@redis-16379.hosted.com:16379/0 ping PONG
連續(xù)運行相同的命令
可以在用戶選擇的兩次執(zhí)行之間暫停的情況下,將同一命令執(zhí)行指定的次數(shù)
-r <count>
:運行命令的次數(shù)-i <delay>
:- 每隔幾秒運行一次命令。
- 默認情況下,間隔(或延遲)設(shè)置為 0,因此命令會盡快執(zhí)行
- 注意:-i的單位是秒,不支持毫秒,如果想每隔10毫秒執(zhí)行一次,可以用-i 0.01
示例:對foo自增5次
$ redis-cli -r 5 incr foo (integer) 1 (integer) 2 (integer) 3 (integer) 4 (integer) 5
示例:執(zhí)行三次ping
bogon:~ ww$ redis-cli -r 3 ping PONG PONG PONG bogon:~ ww$
示例:每隔1秒執(zhí)行一次ping,執(zhí)行五次
bogon:~ ww$ redis-cli -r 5 -i 1 ping PONG PONG PONG PONG PONG bogon:~ ww$
示例
要永遠運行相同的命令,請使用-1
作為 count。因此,為了隨時間監(jiān)控 RSS 內(nèi)存大小,可以使用如下命令:
$ 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 ...
CSV 輸出
有時您可能希望使用redis-cli以快速將數(shù)據(jù)從 Redis 導(dǎo)出到外部程序。這可以使用 CSV(逗號分隔值)輸出功能來完成:
$ redis-cli lpush mylist a b c d (integer) 4 $ redis-cli --csv lrange mylist 0 -1 "d","c","b","a"
目前不可能像那樣導(dǎo)出整個數(shù)據(jù)庫,而只能運行帶有 CSV 輸出的單個命令。
交互模式
在交互模式下,用戶在提示符下鍵入 Redis 命令。命令被發(fā)送到服務(wù)器,進行處理,回復(fù)被解析并呈現(xiàn)為更簡單的形式以供閱讀。
啟動
在交互模式下運行 CLI 不需要什么特別的東西 - 只需啟動它而不帶任何參數(shù),你就在:
$ redis-cli 127.0.0.1:6379> ping PONG
字符串127.0.0.1:6379>是提示。它提醒您已連接到給定的 Redis 實例。
當您連接到的服務(wù)器發(fā)生變化時,或者當您在數(shù)據(jù)庫編號為零的數(shù)據(jù)庫上進行操作時,提示會發(fā)生變化:
127.0.0.1:6379> select 2 OK 127.0.0.1:6379[2]> dbsize (integer) 1 127.0.0.1:6379[2]> select 0 OK 127.0.0.1:6379> dbsize (integer) 503
處理連接和重新連接
connect通過指定我們要連接的主機名和端口,在交互模式下使用該命令可以連接到不同的實例:
127.0.0.1:6379> connect metal 6379 metal:6379> ping PONG
如您所見,提示會相應(yīng)更改。如果用戶嘗試連接到無法訪問的實例,則會redis-cli進入斷開連接模式并嘗試使用每個新命令重新連接:
127.0.0.1:6379> connect 127.0.0.1 9999 Could not connect to Redis at 127.0.0.1:9999: Connection refused not connected> ping Could not connect to Redis at 127.0.0.1:9999: Connection refused not connected> ping Could not connect to Redis at 127.0.0.1:9999: Connection refused
通常在檢測到斷開連接后,CLI 總是會嘗試透明地重新連接:如果嘗試失敗,則顯示錯誤并進入斷開連接狀態(tài)。以下是斷開和重新連接的示例:
127.0.0.1:6379> debug restart Could not connect to Redis at 127.0.0.1:6379: Connection refused not connected> ping PONG 127.0.0.1:6379> (now we are connected again)
執(zhí)行重新連接時,redis-cli自動重新選擇上次選擇的數(shù)據(jù)庫編號。但是,連接的所有其他狀態(tài)都將丟失,例如處于事務(wù)中間的事務(wù)狀態(tài):
$ redis-cli 127.0.0.1:6379> multi OK 127.0.0.1:6379> ping QUEUED ( here the server is manually restarted ) 127.0.0.1:6379> exec (error) ERR EXEC without MULTI
在交互模式下使用 CLI 進行測試時,這通常不是問題,但您應(yīng)該了解此限制。
運行相同的命令 N 次
通過在命令名稱前加上一個數(shù)字,可以多次運行相同的命令:
127.0.0.1:6379> 5 incr mycounter (integer) 1 (integer) 2 (integer) 3 (integer) 4 (integer) 5
清除終端屏幕
clear在交互模式下使用該命令會清除終端的屏幕。
特殊操作模式
-x
- –x選項代表從標準輸入(stdin)讀取數(shù)據(jù)作為redis-cli的最后一個參數(shù),一般與管道符在一起使用。
[root@Redis ~]# echo dbsize|redis-cli -x (integer) 14
例如下面的操作會將字符串world作為set hello的值:
–stat:連續(xù)統(tǒng)計模式
–stat選項可以實時獲取redis的重要統(tǒng)計信息,雖然info命令中的統(tǒng)計信息更全,但是能實時看到一些增量的數(shù)據(jù)對redis的運維還是有一些幫助的
$ redis-cli --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
在這種模式下,每秒鐘都會打印一條新行,其中包含有用信息和舊數(shù)據(jù)點之間的差異。您可以輕松了解內(nèi)存使用情況、客戶端連接等情況。
-i <interval>
在這種情況下,該選項用作修改器,以更改發(fā)出新行的頻率。默認值為一秒。
-hotkeys:找出server中熱點key 命令
# Scanning the entire keyspace to find hot 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). [00.00%] Hot key 'dd' found so far with counter 4 [00.00%] Hot key 'myset' found so far with counter 5 [00.00%] Hot key 'a' found so far with counter 5 [00.00%] Hot key 'dds' found so far with counter 4 [71.43%] Hot key 'aa' found so far with counter 4 [71.43%] Hot key 'key' found so far with counter 4 -------- summary ------- Sampled 14 keys in the keyspace! hot key found with counter: 5 keyname: myset hot key found with counter: 5 keyname: a hot key found with counter: 4 keyname: dd hot key found with counter: 4 keyname: dds hot key found with counter: 4 keyname: aa hot key found with counter: 4 keyname: key
–bigkeys:掃描大鍵
--bigkeys
選項使用scan命令對redis的鍵進行采樣,從中找到內(nèi)存占用較大的鍵值,這些鍵可能是系統(tǒng)的瓶頸
$ redis-cli --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). [00.00%] Biggest string found so far 'key-419' with 3 bytes [05.14%] Biggest list found so far 'mylist' with 100004 items [35.77%] Biggest string found so far 'counter:__rand_int__' with 6 bytes [73.91%] Biggest hash found so far 'myobject' with 3 fields -------- summary ------- Sampled 506 keys in the keyspace! Total key length in bytes is 3452 (avg len 6.82) Biggest string found 'counter:__rand_int__' has 6 bytes Biggest list found 'mylist' has 100004 items Biggest hash found 'myobject' has 3 fields 504 strings with 1403 bytes (99.60% of keys, avg size 2.78) 1 lists with 100004 items (00.20% of keys, avg size 100004.00) 0 sets with 0 members (00.00% of keys, avg size 0.00) 1 hashs with 3 fields (00.20% of keys, avg size 3.00) 0 zsets with 0 members (00.00% of keys, avg size 0.00)
–scan:掃描指定模式的鍵
- 此模式與該–bigkeys選項一樣,使用SCAN命令
- 因此如果數(shù)據(jù)集發(fā)生變化,可能會多次報告鍵,但如果自迭代開始以來該鍵就存在,則不會丟失任何鍵
$ redis-cli --scan | head -10 key-419 key-71 key-236 key-50 key-38 key-458 key-453 key-499 key-446 key-371
請注意,head -10用于僅打印輸出的第一行。
掃描能夠使用帶有選項的SCAN命令的底層模式匹配功能–pattern。
$ redis-cli --scan --pattern '*-11*' key-114 key-117 key-118 key-113 key-115 key-112 key-119 key-11 key-111 key-110 key-116
通過wc命令管道輸出可用于按鍵名計算特定類型的對象:
$ redis-cli --scan --pattern 'user:*' | wc -l 3829433
監(jiān)控Redis實例的延遲
redis通常用于延遲非常關(guān)鍵的環(huán)境中。延遲涉及應(yīng)用程序的多個移動部分,從客戶端庫到網(wǎng)絡(luò)堆棧,再到redis實例本身
–latency
- 測試客戶端到目標Redis的網(wǎng)絡(luò)延遲
實例
例如當前拓撲結(jié)構(gòu)如下圖所示。客戶端B和Redis在機房B,客戶端A在機房A,機房A和機房B是跨地區(qū)的
客戶端B:
[root@Redis ~]# redis-cli --latency min: 0, max: 1, avg: 0.07 (824 samples)
客戶端A:
[root@chenxing2 redis]# redis-cli -h 192.168.71.135 --latency min: 0, max: 1, avg: 0.33 (113 samples)
可以看到客戶端A由于距離Redis比較遠,平均網(wǎng)絡(luò)延遲會稍微高一些
–latency-history
–latency的執(zhí)行結(jié)果只有一條,如果想以分時段的形式了解延遲信息,可以使用 --latency-history 選項:
redis-cli -h 127.0.0.1 -p 6379 --latency-history min: 0, max: 2, avg: 0.27 (1301 samples) -- 15.01 seconds range min: 0, max: 2, avg: 0.27 (1301 samples) -- 15.00 seconds range . . . min: 0, max: 1, avg: 0.28 (1308 samples) -- 15.00 seconds range
可以看出,每15秒輸出一次,可以通過-i參數(shù)控制時間間隔,比如:
[root@chenxing2 redis]# redis-cli -h 127.0.0.1 -p 6379 --latency-history -i 1 //一秒輸出一次 min: 0, max: 1, avg: 0.27 (92 samples) -- 1.00 seconds range min: 0, max: 1, avg: 0.23 (91 samples) -- 1.00 seconds range
–latency-dist
- 該選項會使用統(tǒng)計圖表的形式從控制臺輸出延遲統(tǒng)計信息
$ redis-cli --latency-dist (output not displayed, requires a color terminal, try it!)
–rdb:導(dǎo)入rdb文件
root@hylaz:~# redis-cli --rdb rdb.log SYNC sent to master, writing 344 bytes to 'rdb.log' Transfer finished with success.
該命令選項實現(xiàn):
- 向server發(fā)送SYNC命令,返回需要寫的總字節(jié)數(shù)
- 從server讀取總字節(jié)數(shù)據(jù)寫到指定文件中
–slave:從機模式
–slave選項是把當前客戶端模擬成當前redis節(jié)點的從節(jié)點,可以用來獲當前redis節(jié)點的更新操作
合理的利用這個選項可以記錄當前連接Redis節(jié)點的更新操作,這些更新操作可能是實際開發(fā)業(yè)務(wù)時需要的數(shù)據(jù)。
第一個客戶端使用–slave選項,可以看到它會一直處于等待狀態(tài):
[root@Redis ~]# redis-cli --slave SYNC with master, discarding 1765 bytes of bulk transfer... SYNC done. Logging commands from master. "PING"
另外一些客戶端進行一些數(shù)據(jù)的操作:
127.0.0.1:6379> set zj sb OK 127.0.0.1:6379> del zj (integer) 1
設(shè)置–slave選項的客戶端會出現(xiàn)這些操作的指示:
[root@Redis ~]# redis-cli --slave SYNC with master, discarding 1765 bytes of bulk transfer... SYNC done. Logging commands from master. "PING" "PING" "PING" "PING" "PING" "SELECT","0" "set","zj","sb" "PING" "PING" "del","zj"
–pipe
–pipe選項用于將命令封裝成Redis通信協(xié)議定義的數(shù)據(jù)格式,批量發(fā)送給Redis執(zhí)行。
–raw和–no-raw
–no-raw選項是要求命令的返回結(jié)果必須是原始的格式,–raw恰恰相反,返回格式化后的結(jié)果。
在Redis中設(shè)置一個鍵,如果用get或–no-row選項,那么返回的結(jié)果是二進制格式:
[root@Redis ~]# redis-cli set hello "你好" OK [root@Redis ~]# redis-cli get hello "\xe4\xbd\xa0\xe5\xa5\xbd" [root@Redis ~]# redis-cli --no-raw get hello "\xe4\xbd\xa0\xe5\xa5\xbd"
如果使用–raw選項,就會返回中文:
[root@Redis ~]# redis-cli --raw get hello 你好
到此這篇關(guān)于redis中redis-cli使用小結(jié)的文章就介紹到這了,更多相關(guān)redis-cli使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis?鍵值對(key-value)數(shù)據(jù)庫實現(xiàn)方法
Redis 的鍵值對中的 key 就是字符串對象,而 value 可以是字符串對象,也可以是集合數(shù)據(jù)類型的對象,比如 List 對象,Hash 對象、Set 對象和 Zset 對象,這篇文章主要介紹了Redis?鍵值對數(shù)據(jù)庫是怎么實現(xiàn)的,需要的朋友可以參考下2024-05-05redis快照模式_動力節(jié)點Java學(xué)院整理
這篇文章主要為大家詳細介紹了redis快照模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Redis之RedisTemplate配置方式(序列和反序列化)
這篇文章主要介紹了Redis之RedisTemplate配置方式(序列和反序列化),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03