基于Python项目的Redis缓存消耗内存数据简单分析(附详细操作步骤)
Redis:一个高性能的key-value数据库。支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;提供string、list、set、zset、hash等数据结构的存储,并支持数据的备份。
本文适合使用的场景:当一个项目中Redis缓存的数据量逐渐增大,Redis缓存的数据占用内存也会越来越大,而且其中有很多很可能是价值不大的数据。由于Redis是一个key-value数据库,所以对其中的数据进行分析没有mysql数据库那么直观。那么此时,我们需要寻找工具来分析Redis缓存中的哪些数据占用内存比较大,并结合项目实际的情况来分析这些数据存储的价值如何?从而作出具体删减数据的方案,来解放服务器端宝贵的内存资源。
本文需要采用的工具:Rdbtools和MySQL。
Rdbtools:使用Python语言编写的,可以解析Redis的dump.rdb文件。此外,提供以下工具:
(1)跨所有数据库和密钥生成数据的内存报告
(2)将dump文件转换为JSON
(3)使用标准diff工具比较两个dump文件
具体源码GitHub链接:https://github.com/sripathikrishnan/redis-rdb-tools/
MySQL:一种开源且比较轻量级的关系型数据库。本文使用Rdbtools解析出Redis的dump.rdb文件并生成内存报告*.csv文件(PS:下文操作文件为result_facelive_hot.csv),然后把该文件导入到MySQL数据库中,最后通过编写具体的SQL语句脚本生成想要的数据分析结果的*.csv文件(PS:下午SQL脚本中生成的文件名为redis_key_storage.csv)
参考资料:
1.使用代码完成csv文件导入Mysql(https://blog.csdn.net/quiet_girl/article/details/71436108)
2.使用rdbtools工具来解析redis dump.rdb文件及内存使用量(http://www.ywnds.com/?p=8441)
3.MySQL必知必会:组合查询(Union)(https://segmentfault.com/a/1190000007926959)