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;