rdbtools 是解析Redis rdb文件、分析其內存,導出其數據等比較好的工具,用python編寫。python
Github地址:mysql
https://github.com/sripathikrishnan/redis-rdb-toolslinux
1、安裝方法:git
pip install rdbtools github
2、使用方法:正則表達式
1.幫助命令 rdb --helpredis
-c FILE #指定rdb文件;sql
-f FILE #指定導出文件;數據庫
-n DBS #解析指定數據庫,若是不指定默認包含全部;json
-k KEYS #指定須要導出的KEY,能夠使用正則表達式;
-o NOT_KEYS #指定不須要導出的KEY,能夠使用正則表達式;
-t TYPES #指定解析的數據類型,可能的值有:string,hash,set,sortedset,list;能夠提供多個類型,若是沒有指定,全部數據類型都返回;
-b BYTES #限制內存輸出的大小,大於或者等於這個值;
-l LARGEST #根據內存輸出大小top N個 key;
-e ESCAPE #指定輸出編碼,默認RAW;
2.解析dumo.rdb文件,以jsno格式輸出
rdb -c json /var/lib/redis/dump.rdb
rdb -c json /var/lib/redis/dump.rdb > /var/lib/redis/rdbtools.json
(json將輸出保存到指定文件中)
3.只解析輸出符合正則的keys
rdb -c json -k "my" /var/lib/redis/dump.rdb
4.根據類型解釋輸出(-t 命令)
rdb -c json -t set /var/lib/redis/6379/dump.rdb
5.生成CSV格式的內存報告。包含的列有:數據庫ID,數據類型,key,內存使用量(byte),編碼。內存使用量包含key、value和其餘值
sudo rdb -c memory /var/lib/redis/6379/dump.rdb > /var/lib/redis/6379/memory.csv
6.生成CSV格式的內存報告,內存使用量128以上的(-b命令)
sudo rdb -c memory -b 128 /vagrant/dump.rdb
7.生成CSV格式的內存報告,輸出內存使用前10 (-l命令)
sudo rdb -c memory -l 10 /vagrant/dump.rdb
8.單個key所使用的內存量 (redis-memory-for-key 命令)
redis-memory-for-key -s 192.168.50.59 -p 6379 Summer_Gamebox_WG_all
3、通常分析流程
1.用 生成內存報告 rdb -c memory
sudo rdb -c memory /vagrant/dump.rdb >test.csv
(rdb數據文件大,生成時間就長,通常1.56G的要40來分鐘)
2.報告生成後,用linuxsort命令排序,生成有順序的文件,查看耗內存最高的key有哪些,找出異常數據
sudo sort -k4nr -t , test.csv > sort.txt
3.例如,查詢得知‘send_msg’這個key的hashtable類型的集合不少耗內存最大的,統計總共耗了多少
sudo cat sort.txt | grep ‘send_msg’ | grep ‘hashtable’ | awk -F ',' '{sum += $4};END {print sum}'