基于redis key占用内存量分析

 更新时间:2020年11月24日 17:04:33   作者:4kgurbby  
这篇文章主要介绍了基于redis key占用内存量分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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;

补充知识: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占用内存量分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现动态数字时钟

    Java实现动态数字时钟

    这篇文章主要为大家详细介绍了Java实现动态数字时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • MyBatis-Plus如何实现自动加密解密

    MyBatis-Plus如何实现自动加密解密

    这篇文章主要介绍了MyBatis-Plus实现自动加密解密方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • SpringBoot Import及自定义装配实现方法解析

    SpringBoot Import及自定义装配实现方法解析

    这篇文章主要介绍了SpringBoot Import及自定义装配实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot中的自定义Banner详细解析

    SpringBoot中的自定义Banner详细解析

    这篇文章主要介绍了SpringBoot中的自定义Banner详细解析,Banner即横幅标语,我们在启动SpringBoot项目时会将Banner信息打印至控制台,我们可以输出一些图形、SpringBoot版本信息等内容,需要的朋友可以参考下
    2024-01-01
  • spring对JDBC和orm的支持实例详解

    spring对JDBC和orm的支持实例详解

    这篇文章主要介绍了spring对JDBC和orm的支持实例详解,需要的朋友可以参考下
    2017-09-09
  • Spring Boot jar可执行原理的彻底分析

    Spring Boot jar可执行原理的彻底分析

    这篇文章主要给大家介绍了关于Spring Boot jar可执行原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • java实现简单的猜数字小游戏

    java实现简单的猜数字小游戏

    这篇文章主要为大家详细介绍了java实现简单猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 详解在Spring-Boot中实现通用Auth认证的几种方式

    详解在Spring-Boot中实现通用Auth认证的几种方式

    这篇文章主要介绍了详解在Spring-Boot中实现通用Auth认证的几种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Eclipse安装Free marker插件教程

    Eclipse安装Free marker插件教程

    这篇文章主要为大家详细介绍了Eclipse安装Free marker插件教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • springboot使用kafka事务的示例代码

    springboot使用kafka事务的示例代码

    Kafka 同数据库一样支持事务,当发生异常的时候可以进行回滚,确保消息监听器不会接收到一些错误的或者不需要的消息,本文就来介绍一下springboot使用kafka事务的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06

最新评论