Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它們 雖然比較簡單,但是麻雀雖小五臟俱全,有時可以很巧妙地解決一些問題
一、redis-cli
在前面數據庫連接的時候已經redis-cli的-h、-p參數,除了這些參數,還有很多有用的參數,要了解redis-cli的全部參數,可以執行redis-cli-help命令來進行查看
下面將對一些重要參數的含義以及使用場景進行說明
-x
-x選項代表從標準輸入(stdin)讀取數據作為redis-cli的最后一個參數
例如下面的操作會將字符串world作為set hello的值:
-c
-c(cluster)選項是連接Redis Cluster節點時需要使用的
-c選項可以防止moved和ask異常,有關Redis Cluster將在后面介紹
-a
如果Redis配置了密碼,可以用-a(auth)選項,有了這個選項就不需要手動輸入auth命令
如果需要redis的“requirepass”配置參數:
CONFIG SET requirepass "123456" 可以設置redis的登錄密碼為123456
--scan、--pattern
--scan選項和--pattern選項用于掃描指定模式的鍵,相當于使用scan命令
--slave
-slave選項是把當前客戶端模擬成當前Redis節點的從節點,可以用來獲取當前Redis節點的更新操作,有關于Redis復制會在后面文章詳細介紹。合理的利用這個選項可以記錄當前連接Redis節點的一些更新操作,這 些更新操作很可能是實際開發業務時需要的數據
注意:ING命令是由于主從復制產生的,后面文章會對主從復制進行介紹
下面開啟第一個客戶端,使用--slave選項,看到同步已完成:
在后側開啟另一個客戶端做一些更新操作,然后左側的第一個客戶端會收到Redis節點的更新操作:
--rdb
--rdb選項會請求Redis實例生成并發送RDB持久化文件,保存在本地
?可使用它做持久化文件的定期備份。有關Redis持久化在后面會詳細介紹
--pipe
--pipe選項用于將命令封裝成Redis通信協議定義的數據格式,批量發送給Redis執行,有關Redis通信協議將在后面會詳細介紹
例如下面操作 同時執行了set hello world和incr counter兩條命令:
echo -en '*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n*2\r\n$4\r\nincr\r\n$7\r\ncounter\r\n' | redis-cli --pipe
--bigkeys
--bigkeys選項使用scan命令對Redis的鍵進行采樣,從中找到內存占用比較大的鍵值,這些鍵可能是系統的瓶頸
--eval
--eval選項用于執行指定Lua腳本,有關Lua腳本的使用將在后面會詳細介紹
latency有三個選項,分別是--latency、--latency-history、--latency-dist。它們都可以檢測網絡延遲,對于Redis的開發和運維非常有幫助
①--latency
該選項可以測試客戶端到目標Redis的網絡延遲
例如當前拓撲結構如下圖所示。客戶端B和Redis在機房B,客戶端A在機房A,機房A和機房B是跨地區的
客戶端B:
客戶端A:
可以看到客戶端A由于距離Redis比較遠,平均網絡延遲會稍微高一些
②--latency-history
--latency的執行結果只有一條,如果想以分時段的形式了解延遲信息, 可以使用--latency-history選項,可以通過-i參數控制間隔時間
③--latency-dist
該選項會使用統計圖表的形式從控制臺輸出延遲統計信息
--stat
--stat選項可以實時獲取Redis的重要統計信息,雖然info命令中的統計信 息更全,但是能實時看到一些增量的數據(例如requests)對于Redis的運維 還是有一定幫助的,如下所示:
--raw、--no-raw
--no-raw選項是要求命令的返回結果必須是原始的格式,--raw恰恰相反,返回格式化后的結果
在Redis中設置一個中文的value:
如果正常執行get或者使用--no-raw選項,那么返回的結果是二進制格式:
如果使用了--raw選項,將會返回中文:
二、redis-server
--test-memory
redis-server除了啟動Redis外,還有一個--test-memory選項。--test-memory可以用來檢測當前操作系統能否穩定地分配指定容量的內存給 Redis,通過這種檢測可以有效避免因為內存問題造成Redis崩潰
例如下面操作檢測當前操作系統能否提供1G的內存給Redis。整個內存檢測的時間比較長,就不顯示圖片了
redis-server --test-memory 1024
當輸出passed this test時說明內存檢測完畢,最后會提示--test-memory只是簡單檢測,如果有質疑可以使用更加專業的內存檢測工具。
通常無需每次開啟Redis實例時都執行--test-memory選項,該功能更偏向于調試和測試,例如,想快速占滿機器內存做一些極端條件的測試,這個功 能是一個不錯的選擇
三、redis-benchmark
redis-benchmark可以為Redis做基準性能測試,它提供了很多選項幫助開發和運維人員測試Redis的相關性能,下面分別介紹這些選項
詳情參閱:https://redis.io/topics/benchmarks
-h
指定服務器主機名
默認值127.0.0.1
-p
指定服務器端口
默認值為6379
-s
指定服務器socket
-c
-c(clients)選項代表客戶端的并發數量(默認是50)
-n <requests>
-n(num)選項代表客戶端請求總量(默認是100000)
例如下面的命令代表100各個客戶端同時請求Redis,一 共執行20000次。redis-benchmark會對各類數據結構的命令進行測試,并給出性能指標:
redis-benchmark -c 100 -n 20000
例如上面一共執行了20000次get操作,在0.81秒完成,每個請求數據量是3個字節,2.44%的命令執行時間小于1毫秒,Redis每秒可以處理24691.36次get請求
-d
以字節的形式指定set/get值的數據大小
默認值為2
-q
-q選項僅僅顯示redis-benchmark的requests per second信息
例如,接著上面的演示案例
redis-benchmark -c 100 -n 20000 -q
?
-r
在一個數據庫內容為空的Redis上,執行了redis-benchmark命令之后會發現數據庫中自動新增4個鍵:
如果想向Redis插入更多的鍵,可以執行使用-r(random)選項,可以向Redis插入更多隨機的鍵
redis-benchmark -c 100 -n 20000 -r 10000
-r選項會在key、counter鍵上加一個12位的后綴,-r10000代表只對后四位做隨機處理(-r不是隨機數的個數)。例如進行上面的操作后,key的數量和結果結構如下:
-P
通過管道傳輸請求,-P選項代表每個請求pipeline的數據量(默認為1)
-k<boolean>
-k選項代表客戶端是否使用keepalive,1為使用,0為不使用,默認值為 1
-t
-t選項可以對指定命令進行基準測試
--csv
--csv選項會將結果按照csv格式輸出,便于后續處理,如導出到Excel 等
-L
死循環,永久執行測試
-I
Idle模式。僅打開N個idle連接并等待