Redis-audit 是一個用ruby實現的腳本,通過它,我們可以知道每一類 key 對內存的使用量。它可以提供的數據有:某一類 key 值的訪問頻率如何,有多少值設置了過期時間,某一類 key 值使用內存的大小,這很方便讓我們能排查哪些 key 不常用或者壓根不用。
比較了下,比這些 Sentinel,Redis Live,Redis Faina,Redis-sampler,Redis-rdb-tools 監控或者數據分布工具要好!
下載
git clone https://github.com/snmaynard/redis-audit.git
下載後有如下幾個文件,文件制定的ruby版本,redis版本可能會需要根據你已安裝的進行調整:
Gemfile Gemfile.lock README.md redis-audit.rb
可能會涉及到安裝一些依賴包
gem install bundle
使用
bundle exec ruby redis-audit.rb [host] [port] [dbnum] [(optional)sample_size]比如:
bundle exec ruby redis-audit.rb 127.0.0.1 6379 1 10000
10000 是指隨機個數,如果超過數據庫的鍵的數量,則遍歷所有鍵,如果小於,則隨機10000 ,10000個可能重復
輸出:
分析:
監控了一下腳本的執行,原理上都是發請求給redis,
1.先是嘗試連接:"select" "1"
2.然後獲取鍵的數量:"dbsize"
3.如果輸入的Sample Size大於數據庫鍵的數量,則遍歷所有的鍵,不隨機;
如果小於,則以我們輸入的采樣個數,進行隨機樣本次數,獲取到隨機鍵:"randomkey"
4.每個鍵都進行如下三步操作,比如鍵為horse:39:
4.1 "debug" "object" "horse:39" 這個是用來計算內存使用的,和鍵的閒置時間
4.2 "type" "horse:39" 這個是用來判斷鍵值的類型的
4.3 "ttl" "horse:39" 這個是用來看這個鍵的有效期的
這樣,再整合info的其他數據,slow log的,幾個client連著,如此般的監控腳本我們自己也可以用其他語言去實現,比如時下流行的html5做個監控界面。