利用redis-rdb-tools分析redis内存

前言
我们经常会利用redis作为缓存的工具,然而为了使redis更高效,我们一般不会开启VM模式,但运行久了之后,随着redis占用内存的不断膨胀,我们常需分析redis内存现状,哪些key占用了很多的内存,有没有没用的key没有清除掉。利用 redis-rdb-tools和sqlite3,我们可以分析redis的内存情况.

环境
本示例使用Ubuntu 系统。

实验流程
1. 利用redis的持久化机制,得到近期redis内存数据的一个备份文件,如取名:memory.rdb
2. 安装 pip
apt-get install python-pip
3. 安装 rdbtool
pip install rdbtool
4. 利用 rdbtool把 memory.rdb 转换为 memory.csv
rdb -c memory memory.rdb > memory.csv
我使用的 memory.rdb高达10G,使用了大概1小时才转换完成,所以转换过程要耐心等待,可以使用top查看cpu消耗情况,一般会打满cpu。

5. 安装 sqlite3
apt-get install sqlite3

6. 创建一个库:
sqlite3 memory.db

7. 创建 memory表
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));

继续执行: select count(*) from memory;
如果返回0表示创建成功了

8. 导入 memory.csv 到 memory表
sqlite>.import /mnt/data/redis/test/memory.csv memory
这时候发现出错了:
利用redis-rdb-tools分析redis内存_第1张图片
利用redis-rdb-tools分析redis内存_第2张图片
查看csv文件的内容,发现csv是以英文,进行分隔的
利用redis-rdb-tools分析redis内存_第3张图片
而sqlite3默认使用 | 作为分隔符,使用 .show 命令可以查看,
利用redis-rdb-tools分析redis内存_第4张图片
使用 .separator , 进行修改:
利用redis-rdb-tools分析redis内存_第5张图片

删除旧表:
sqlite> drop table memory;
然后利用上面的建表语句重新建好表,再次导入
利用redis-rdb-tools分析redis内存_第6张图片
如果还出现了错误,比如说期望的是7列,但是csv却提供了8列,可以使用 unix2dos工具先对 csv文件进行转换。

到这里,就导入成功了,可以使用sql语句进行查询,比如查询最占内存的10个key
利用redis-rdb-tools分析redis内存_第7张图片
然后就可以进行后续的优化处理了.

总结
得到csv文件后,也可以直接下载到本地直接打开查看,直接在文件中进行排序,这个就因人喜欢而异了,不过用sqlite3操作会比较方便。

最后的参考讲了本篇的方法,不过在操作的时候遇到了一些问题,所以这里新写了这篇文章说明。

参考

https://yq.aliyun.com/articles/62899

你可能感兴趣的:(redis)