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;