利用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/20230215/64159fcdb67b44d88a3ff2949241bf57.jpg)
![](https://image.cha138.com/20230215/65ed878dcca24b3e9f09a9d938d816ac.jpg)
查看csv文件的内容,发现csv是以英文,进行分隔的
![](https://image.cha138.com/20230215/f136e6fcfb41418dab3c7f97471e09d1.jpg)
![](https://image.cha138.com/20230215/dbd3c59ca27c44a0ae6708582ac6f02e.jpg)
![](https://image.cha138.com/20230215/08909db10b5447678f6e68df0013e09f.jpg)
删除旧表: sqlite> drop table memory; 然后利用上面的建表语句重新建好表,再次导入
![](https://image.cha138.com/20230215/9a9b5b134ee44edfa0cce91755541964.jpg)
到这里,就导入成功了,可以使用sql语句进行查询,比如查询最占内存的10个key
![](https://image.cha138.com/20230215/b0d266ae955f4d83a78ff89dfc19dd1a.jpg)
总结 得到csv文件后,也可以直接下载到本地直接打开查看,直接在文件中进行排序,这个就因人喜欢而异了,不过用sqlite3操作会比较方便。
最后的参考讲了本篇的方法,不过在操作的时候遇到了一些问题,所以这里新写了这篇文章说明。
参考
https://yq.aliyun.com/articles/62899
以上是关于利用redis-rdb-tools分析redis内存的主要内容,如果未能解决你的问题,请参考以下文章