標籤:
工欲善其事,必先利其器。在使用Redis的時候如果能夠有效利用Redis的各種管理工具,將會大大方便開發和管理。
一、 redis-cli
相信大家對redis-cli已經很熟悉了,作為Redis內建的命令列用戶端,你可以從任何安裝有Redis的伺服器中找到它,所以對於管理Redis而言redis-cli是最簡單實用的工具。redis-cli可以執行大部分的Redis命令,包括查看資料庫資訊的INFO命令,更改資料庫設定的CONFIG命令和強制進行RDB快照的SAVE命令等,下面會介紹幾個管理Redis時非常有用的命令。
1.耗時命令日誌
當一條命令執行時間超過限制時,Redis會將該命令的執行時間等資訊加入耗時命令日誌(slow log )以供開發人員查看。可以通過設定檔的slowlog-log-slower-than 參數設定這一限制,要注意單位是微秒(1000000微秒相當於1秒),預設值是10000。耗時命令日誌儲存在記憶體中,可以通過設定檔的slowlog-max-len 參數來限制記錄的條數。
使用SLOWLOG GET命令來獲得當前的耗時命令日誌,如:
[html] view plaincopyprint?
- redis>SLOWLOG GET
- 1) 1) (integer) 4
- 2) (integer) 1356806413
- 3) (integer) 58
- 4) 1) "get"
- 2) "foo"
- 2) 1) (integer) 3
- 2) (integer) 1356806408
- 3) (integer ) 34
- 4) 1) "set"
- 2) "foo"
- 3) "bar "
每條日誌都由以下4個部分組成:
(1)該日誌唯一ID;
(2)該命令執行的UNIX時間;
(3)該命令的耗時時間,單位是微秒;
(4)命令及其參數。
為了產生一些耗時命令日誌作為示範,這裡將slowlog-log-slower-than 參數值設定為O,即記錄所有命令。如果設定為負數則會關閉耗時命令日誌。
2.命令監控
Redis提供了MONITOR命令來監控Redis執行的所有命令,redis-cli同樣支援這個命令,如在redis-cli中執行MONITOR:
[html] view plaincopyprint?
- redis>MONITOR
- OK
這時Redis執行的任何命令都會在redis-cli中列印出來,如我們開啟另一個redis-cli執行SET foo bar命令,在之前的redis-cli中會輸出如下內容:
[html] view plaincopyprint?
- 1356806981.885237 [0 127.0.0.1:57339] "SET" "foo" "bar
MONITOR命令非常影響Redis的效能,一個用戶端使用MONITOR命令會降低 Redis將近一半的負載能力。所以MONITOR命令只適合用來調試和錯誤修正。
Instagram團隊開發了一個基於MONITOR命令的Redis查詢剖析器redis-faina。redis-faina可以根據MONITOR命令的監控結果分析出最常用的命令、訪問最頻繁的鍵等資訊,對瞭解Redis的使用方式協助很大。
Instagram 是Facebook 旗下的圖片分享社區。redis-faina的項目地址是https://github.com/Instagram/redis-faina,直接下載其中的redis-faina.py檔案即可使用。
redis-faina.py的輸入值為一段時間的MONITOR命令執行結果。例如:
[html] view plaincopyprint?
- redis-cli MONITOR | head -n <要分析的命令數> | ./redis-faina.py
二、 phpRedisAdmin
當Redis中的鍵較多時,使用redis-cli管理資料並不是很方便,就如同管理MySQL時有人喜歡使用phpMyAdm in 一樣,Redis同樣有一個PHP開發的網頁端管理工具phpRedisAdmin 。phpRedisAdmin 支援以樹形結構查看鍵列表,編輯按鍵值,匯入/匯出資料庫資料,查看資料庫資訊和查看鍵資訊等功能。
1.安裝phpRedisAdmin
安裝phpRedisAdmin 的方法如下:
[html] view plaincopyprint?
- git clone http s://github.com /ErikDubbelboer/phpRedisAdmin.git
- cd phpRedisAdmin
phpRedisAdmin 依賴PHP的Redis用戶端Predis,所以還需要執行下面兩個命令下載Predis:
[html] view plaincopyprint?
- git submodule init
- git submodule update
2.設定資料庫串連
下載完phpRedisAdmin 後需要配置Redis的串連資訊。預設phpRedisAdmin 會串連到127.0.0.1,連接埠6379,如果需要更改或者添加資料庫資訊可以編輯includes檔案夾中的config.inc.php檔案。
3.使用phpRedisAdmin
安裝PHP和Web伺服器(如Nginx),並將phpRedisAdmin檔案夾存放到網站目錄中即可訪問,
phpRedisAdmin自動將Redis的鍵以“:”分隔並用樹形結構顯示出來,十分直觀。如post :1和post :2兩個鍵都在post樹中。
點擊一個鍵後可以查看鍵的資訊,包括鍵的類型、存留時間及索引值,並且可以很方便地編輯。
4.效能
phpRedisAdmin在擷取鍵列表時使用的是KEYS *命令,然後對所有的鍵使用TYPE命令來擷取其資料類型,所以當鍵非常多的時候效能並不高(對於一個有一百萬個鍵的Redis資料庫,在一台普通個人電腦上使用KEYS *命令大約會花費幾十毫秒)。由於Redis使用單線程處理命令,所以對生產環境下擁有大資料量的資料庫來說不適宜使用phpRedisAdmin管理.
三、 Rdbtools
Rdbtools是一個Redis的快照檔案解析器,它可以根據快照檔案匯出JSON資料檔案、分析Redis中每個鍵的佔用空間情況等。Rdbtools是使用Python 開發的,項目地址是
https://github.com/sripathikrishnan/redis-rdb-tools。
1.安裝Rdbtools
使用如下命令安裝Rdbtools:
[html] view plaincopyprint?
- git clone https://github.com/sripathikrishnan/redis-rdb-tools
- cd redis-rdb-tools
- sudo python setup.py instal l
2.產生快照檔案
如果沒有啟用RDB持久化,可以使用SAVE命令手動使Redis產生快照檔案。
3.將快照匯出為JSON格式
快照檔案是二進位格式,不利於查看,可以使用Rdbtools來將其匯出為JSON格式,命令如下:
[html] view plaincopyprint?
- rdb --command json /path/to/dump.rdb > output_file name.json
其中/path/to/dump.rdb是快照檔案的路徑,output_filename.json 為要匯出的檔案路徑。
4.產生空間使用方式報告
Rdbtools能夠將快照檔案中記錄的每個鍵的儲存情況匯出為CSV 檔案,可以將該CSV 檔案匯入到Excel等資料分析工具中分析來瞭解Redis的使用方式。命令如下:
[html] view plaincopyprint?
- rdb -c memory /path/to/dump.rdb > output_filename.csv
- http://www.youyuanapp.com/thread-11419-1-1.html
http://www.youyuanapp.com/thread-11418-1-1.html
http://www.youyuanapp.com/thread-11417-1-1.html
http://www.youyuanapp.com/thread-11412-1-1.html
http://www.youyuanapp.com/thread-11409-1-1.html
http://www.youyuanapp.com/thread-11404-1-1.html
http://www.youyuanapp.com/thread-11403-1-1.html
http://www.youyuanapp.com/thread-11398-1-1.html
http://www.youyuanapp.com/thread-11397-1-1.html
http://www.youyuanapp.com/thread-11395-1-1.html
http://yishujiayuanq.blog.163.com/blog/static/2447250612015025101147963/
http://yishujiayuanq.blog.163.com/blog/static/2447250612015025101251829/
http://yishujiayuanq.blog.163.com/blog/static/244725061201502510133740/
http://yishujiayuanq.blog.163.com/blog/static/2447250612015025101653328/
http://yishujiayuanq.blog.163.com/blog/static/2447250612015025101718995/
http://yishujiayuanq.blog.163.com/blog/static/2447250612015025101738627/
http://yishujiayuanq.blog.163.com/blog/static/2447250612015025101822599/
http://yishujiayuanq.blog.163.com/blog/static/2447250612015025101841318/
http://yishujiayuanq.blog.163.com/blog/static/2447250612015025101927982/
http://yishujiayuanq.blog.163.com/blog/static/244725061201502510197287/
Redis研究(十四)—管理工具