利用redis-rdb-tools分析redis内存
Posted 那个天真的人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用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 这时候发现出错了:
![](https://image.cha138.com/20221109/0a816e9e278c42bbb13c2cffbe7b226d.jpg)
![](https://image.cha138.com/20221109/2cfaeb821eff41bfac8d33084ade9ced.jpg)
查看csv文件的内容,发现csv是以英文,进行分隔的
![](https://image.cha138.com/20221109/4af42b2ab55d41b78e3a7d1df721c81d.jpg)
![](https://image.cha138.com/20221109/9ff447641b554c36a8778c75a7bfe3be.jpg)
![](https://image.cha138.com/20221109/625d33c8689146c08b7c712c6a1b3848.jpg)
删除旧表: sqlite> drop table memory; 然后利用上面的建表语句重新建好表,再次导入
![](https://image.cha138.com/20221109/8410ca5abd204a099aecb93e6e4ddd71.jpg)
到这里,就导入成功了,可以使用sql语句进行查询,比如查询最占内存的10个key
![](https://image.cha138.com/20221109/9739f815f1c146e8a6d03085bf258bc5.jpg)
总结 得到csv文件后,也可以直接下载到本地直接打开查看,直接在文件中进行排序,这个就因人喜欢而异了,不过用sqlite3操作会比较方便。
最后的参考讲了本篇的方法,不过在操作的时候遇到了一些问题,所以这里新写了这篇文章说明。
参考
https://yq.aliyun.com/articles/62899
以上是关于利用redis-rdb-tools分析redis内存的主要内容,如果未能解决你的问题,请参考以下文章