美文网首页
使用rdbtools+MySQL对Redis进行内存占用分析

使用rdbtools+MySQL对Redis进行内存占用分析

作者: vayci | 来源:发表于2022-02-15 10:13 被阅读0次

    使用rdbtools+MySQL对Redis进行内存占用分析

    业务场景

    线上某IM业务基于Redis作为持久化层实现,近期出现Redis内存告警,于是对线上Redis各Key内存占用进行分析,便于进行业务改造。

    虽然Redis4.0以后提供了memory命令进行内存查询,但是对于存在大量业务key来说可能不够方便,只看统计结果又不够详细不好定位具体业务,选择使用rdbtools来进行分析。

    分析步骤

    1.rdb文件准备

    运维提供了阿里云Redis自动备份文件 backupfile.rdb 。当然也可以自行到Redis目录下获取 dump.rdb 文件。

    2.rdbtools安装

    我这里使用的是linux环境,确保python及pip已经正确安装。

    rdbtools项目地址:https://github.com/sripathikrishnan/redis-rdb-tools

    rdbtools安装,以pip3为例:

    pip3 install rdbtools python-lzf
    

    rdbtools生成内存报告:(更多使用方法可以参考官方文档)

    rdb -c memory backupfile.rdb --bytes 128 -f memory.csv
    

    执行内存分析后CPU会跑满,耐心等待即可。我这里630M共计500万个key的rdb文件运行了接近10分钟。

    执行完成后在当前目录文件生成了内存报告文件 memory.csv

    3.数据导入MySQL

    由于生成的内存报告文件 memory.csv 可能很大,直接打开进行分析处理存在限制,将数据导入MySQL。

    创建表:

    CREATE TABLE `memory` (
      `database` int(11) NOT NULL,
      `type` varchar(50) NOT NULL,
      `key` varchar(255) NOT NULL,
      `size_in_bytes` bigint(20) NOT NULL,
      `encoding` varchar(50) NOT NULL,
      `num_elements` bigint(20) NOT NULL,
      `len_largest_element` bigint(20) NOT NULL,
      `expiry` bigint(20) DEFAULT NULL,
      PRIMARY KEY (`key`) USING BTREE,
      KEY `num_elements` (`num_elements`),
      KEY `size_in_bytes` (`size_in_bytes`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    

    此表字段与csv文件字段一一对应,然后将csv文件数据导入该表。

    最后通过排序以及key的模糊查询等手段,即可完成Redis内存分析。

    相关文章

      网友评论

          本文标题:使用rdbtools+MySQL对Redis进行内存占用分析

          本文链接:https://www.haomeiwen.com/subject/vrirlrtx.html