时间:2021-05-19
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.dbsqlite> 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 memorysqlite>.import memory.csv memory5、查询
查询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;
补充知识:Redis使用量暴增,快速定位有哪些大key在作怪
发现redis使用量突然暴增,于是紧急扩容redis,不能影响服务运行。扩容之后,赶紧查找原因,突破口就是寻找存在哪些大key。
1. 将redis的dump.rdb文件下载到本地(一般redis的持久化文件以rdb的方式存储,在redis配置文件可以找到dump.rdb的存储路径)。
2. 用rdbtools工具生产内存报告,命令是 rdb -c memory,例子:
sudo rdb -c memory /redisfile/dump.rdb >test.csv
注意:rdb文件越大,生成时间越长。
Rdbtools是以python语言开发的。
GITHUP地址:https://github.com/sripathikrishnan/redis-rdb-tools/
3. 内存报告生成后,结合用linux sort命令排序,根据內存列排序,找出最高的key有哪些。例子:
sudo sort -k4nr -t , test.csv > sort.txt
4. 查看前1000个排序最高的数据
awk -F ',' '{print substr($3, 0,18)}' sort.txt | head -1000 | sort -k1 | uniq
5. 查看sort.txt的结果,一般能得出类似‘my_rank_top'开头的集合占用最高,排在了前面。
若要查看类似‘my_rank_top'开头的key总共占用了多少内存,可以用命令:
sudo cat sort.txt | grep ‘my_rank_top' | awk -F ',' '{sum += $4};END {print sum}'
6. 得知了my_rank_top这样的key占用最多内存,而且很可能是业务已经不再需要,但是长期在内存中没清理的,我们可以删除了这些集合。可以用模糊匹配key来删除,命令如下:
redis-cli -h 127.0.0.1 -p 6379 keys 'my_ranking_list*' | xargs redis-cli -h 127.0.0.1 -p 6379 del
另附:在本地启动redis加载dump.rdb文件时,一直load失败。搞了很长时间,终于找到原因:redis配置文件里databases要修改为256,本地默认是16,而产生原始dump.rdb的redis的databases就是25。
以上这篇基于redis key占用内存量分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
redis简介redis(官网:https://redis.io)是一个基于内存的日志型可持久化的缓存数据库,保存形式为key-value格式,redis完全免
redis是一个基于内存的高性能key-value数据库,具有极高的读写速度。本文介绍SpringBoot和Redis的整合,以及如何在项目中具体应用配置文件属
Redis是什么?Redis是一个简单的,高效的,分布式的,基于内存的缓存工具。假设好服务器后,通过网络连接(类似数据库),提供Key-Value式缓存服务。简
redis简介Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。是一个非关
概念 Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,和Memcached类似,它支持存储的v