Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它們雖然比較簡(jiǎn)單,但是麻雀雖小五臟俱全,有時(shí)可以很巧妙地解決一些問(wèn)題。
1.1 redis-cli
- -r
-r(repeat)選項(xiàng)代表將命令執(zhí)行多次 - -i
-i(interval)選項(xiàng)代表每隔幾秒執(zhí)行一次命令,但是-i選項(xiàng)必須和-r選項(xiàng)一起使用,下面的操作會(huì)每隔1秒執(zhí)行一次ping命令,一共執(zhí)行5次$ redis-cli -r 5 -i 1 ping PONG PONG PONG PONG PONG - -x
-x選項(xiàng)代表從標(biāo)準(zhǔn)輸入(stdin)讀取數(shù)據(jù)作為redis-cli的最后一個(gè)參數(shù),例如下面的操作會(huì)將字符串world作為set hello的值:$ echo "world" | redis-cli -x set hello OK - -h,-p,-a
IP、端口號(hào)、密碼 - --scan和--pattern
--scan選項(xiàng)和--pattern選項(xiàng)用于掃描指定模式的鍵,相當(dāng)于使用scan命令 - --bigkeys
--bigkeys選項(xiàng)使用scan命令對(duì)Redis的鍵進(jìn)行采樣,從中找到內(nèi)存占用比
較大的鍵值,這些鍵可能是系統(tǒng)的瓶頸。 - --latency
latency有三個(gè)選項(xiàng),分別是--latency、--latency-history、--latency-dist。它們都可以檢測(cè)網(wǎng)絡(luò)延遲,對(duì)于Redis的開(kāi)發(fā)和運(yùn)維非常有幫助 - --stat
--stat選項(xiàng)可以實(shí)時(shí)獲取Redis的重要統(tǒng)計(jì)信息,雖然info命令中的統(tǒng)計(jì)信息更全,但是能實(shí)時(shí)看到一些增量的數(shù)據(jù)(例如requests)對(duì)于Redis的運(yùn)維還是有一定幫助的,如下所示
redis-cli --stat
------- data ------ --------------------- load -------------------- - child -
keys mem clients blocked requests connections
2451959 3.43G 1162 0 7426132839 (+0) 1337356
2451958 3.42G 1162 0 7426133645 (+806) 1337356 …
2452182 3.43G 1161 0 7426150275 (+1303) 1337356
1.2 redis-server
redis-server除了啟動(dòng)Redis外,還有一個(gè)--test-memory選項(xiàng)。redis-server --test-memory可以用來(lái)檢測(cè)當(dāng)前操作系統(tǒng)能否穩(wěn)定地分配指定容量的內(nèi)存給Redis,通過(guò)這種檢測(cè)可以有效避免因?yàn)閮?nèi)存問(wèn)題造成Redis崩潰,例如下面操作檢測(cè)當(dāng)前操作系統(tǒng)能否提供1G的內(nèi)存給Redis:
redis-server --test-memory 1024
整個(gè)內(nèi)存檢測(cè)的時(shí)間比較長(zhǎng)。當(dāng)輸出passed this test時(shí)說(shuō)明內(nèi)存檢測(cè)完畢,最后會(huì)提示--test-memory只是簡(jiǎn)單檢測(cè),如果有質(zhì)疑可以使用更加專業(yè)的內(nèi)存檢測(cè)工具:
Please keep the test running several minutes per GB of memory.
Also check http:// www.memtest86.com/ and http:// pyropus.ca/software/memtester/
................ 忽略檢測(cè)細(xì)節(jié) ................
Your memory passed this test.
Please if you are still in doubt use the following two tools:
1) memtest86: http:// www.memtest86.com/
2) memtester: http:// pyropus.ca/software/memtester/
通常無(wú)需每次開(kāi)啟Redis實(shí)例時(shí)都執(zhí)行--test-memory選項(xiàng),該功能更偏向于調(diào)試和測(cè)試,例如,想快速占滿機(jī)器內(nèi)存做一些極端條件的測(cè)試,這個(gè)功能是一個(gè)不錯(cuò)的選擇。
1.3 redis-benchmark
redis-benchmark可以為Redis做基準(zhǔn)性能測(cè)試,它提供了很多選項(xiàng)幫助開(kāi)發(fā)和運(yùn)維人員測(cè)試Redis的相關(guān)性能,下面分別介紹這些選項(xiàng)。
- -c
-c(clients)選項(xiàng)代表客戶端的并發(fā)數(shù)量(默認(rèn)是50)。 - -n<requests>
-n(num)選項(xiàng)代表客戶端請(qǐng)求總量(默認(rèn)是100000)。
redis-benchmark -c 100 -n 20000
====== GET ======
20000 requests completed in 0.27 seconds
100 parallel clients
3 bytes payload
keep alive: 1
99.11% <= 1 milliseconds
100.00% <= 1 milliseconds
73529.41 requests per second
- -r
在一個(gè)空的Redis上執(zhí)行了redis-benchmark會(huì)發(fā)現(xiàn)只有3個(gè)鍵:
127.0.0.1:6379> dbsize
(integer) 3
127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "mylist"
3) "key:__rand_int__"
如果想向Redis插入更多的鍵,可以執(zhí)行使用-r(random)選項(xiàng),可以向
Redis插入更多隨機(jī)的鍵。
$ redis-benchmark -c 100 -n 20000 -r 10000
-r選項(xiàng)會(huì)在key、counter鍵上加一個(gè)12位的后綴,-r10000代表只對(duì)后四位做隨機(jī)處理(-r不是隨機(jī)數(shù)的個(gè)數(shù))。例如上面操作后,key的數(shù)量和結(jié)果結(jié)構(gòu)如下:
127.0.0.1:6379> dbsize
(integer) 18641
127.0.0.1:6379> scan 0
1) "14336"
2) 1) "key:000000004580"
2) "key:000000004519"
…
10) "key:000000002113"
- -P
-P選項(xiàng)代表每個(gè)請(qǐng)求pipeline的數(shù)據(jù)量(默認(rèn)為1)。 - -k<boolean>
-k選項(xiàng)代表客戶端是否使用keepalive,1為使用,0為不使用,默認(rèn)值為
1。 - -t
-t選項(xiàng)可以對(duì)指定命令進(jìn)行基準(zhǔn)測(cè)試。
redis-benchmark -t get,set -q
SET: 98619.32 requests per second
GET: 97560.98 requests per second
- --csv
--csv選項(xiàng)會(huì)將結(jié)果按照csv格式輸出,便于后續(xù)處理,如導(dǎo)出到Excel等。
redis-benchmark -t get,set --csv
"SET","81300.81"
"GET","79051.38"