Redis的指令看不出哪一類型的key,佔用了多少內存,不好分析redis內存開銷大的情況下,各應用程序使用緩存的佔比。藉助第3方工具進行分析
1、採用2個工具結合
redis-rdb-tools+sqlite
2、sqlite linux服務器都會自帶,安裝redis-rdb-tools
使用pip安裝 pip install redis-rdb-tools
源碼安裝
git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools
python setup.py install
如果不成功安裝 yum install python-setuptools
3、獲取對應redis的rdb文件,使用redis-rdb-tools生成內存快照
rdb -c memory dump.rdb > memory.csv
注意:內存使用量是理論上的近似值,在一般情況下,略低於實際值
4、把數據導入sqlite(mysql數據庫實際上都能導入),sqlite語法和mysql基本一致
splite3 test.db
sqlite> create table memory(database int,type varchar(128),key varchar(128),size_in_bytes int,encoding varchar(128),num_elements int,len_largest_element varchar(128),time varchar(128));
sqlite>.mode csv memory
sqlite>.import memory.csv memory
5、查詢
查詢key個數
sqlite>select count(*) from memory;
查詢總的內存佔用
sqlite> select sum(size_in_bytes) from memory;
查詢內存佔用最高的10個key
sqlite>select * from memory order by size_in_bytes desc limit 10;