前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用rdbtools工具来解析redis rdb文件

使用rdbtools工具来解析redis rdb文件

作者头像
SEian.G
发布2021-03-03 10:05:22
4.7K0
发布2021-03-03 10:05:22
举报
文章被收录于专栏:SEian.G学习记录SEian.G学习记录
工欲善其事必先利其器,日常工作中,好的工具能够高效的协助我们工作;今天介绍一款用来解析redis rdb文件的工具,非常好用。会之,受用无穷!

一、rdbtools工具介绍

源码地址:https://github.com/sripathikrishnan/redis-rdb-tools/

redis-rdb-tools 是一个 python 的解析 rdb 文件的工具,在分析内存的时候,我们主要用它生成内存快照。

主要有以下三个功能:

  • 生成内存快照
  • 转储成 json 格式
  • 使用标准的 diff 工具比较两个 dump 文件

二、redis-rdb-tools 安装

redis-rdb-tools 有两种安装方式,任选其一即可。

1、使用 PYPI 安装

代码语言:javascript
复制
[root@VM_54_118_centos redis]# pip install rdbtools

2、从源码安装

代码语言:javascript
复制
[root@VM_54_118_centos redis]# git clone https://github.com/sripathikrishnan/redis-rdb-tools.git
[root@VM_54_118_centos redis]# cd redis-rdb-tools/
[root@VM_54_118_centos redis-rdb-tools]# python setup.py install

下面开始使用该工具,执行一个简单的命令

代码语言:javascript
复制
[root@VM_54_118_centos redis-rdb-tools]# rdb --command json /wjqdata/redis/rdb/dump.rdb > /wjqdata/redis/rdb/dump.json
WARNING: python-lzf package NOT detected. Parsing dump file will be very slow unless you install it. To install, run the following command:
pip install python-lzf

从报错信息看,是由于缺少python-lzf包,根据提示直接使用pip install python-lzf命令进行安装

解决方法:

代码语言:javascript
复制
# 在安装python-lzf之前,要安装python-devel依赖包,否则安装会失败
[root@VM_54_118_centos yum.repos.d]# yum install python-devel
 
[root@VM_54_118_centos yum.repos.d]# pip install python-lzf
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
Looking in indexes: http://pypi.douban.com/simple
Collecting python-lzf
  Downloading http://pypi.doubanio.com/packages/e3/33/b8f67bbe695ccc39f868ae55378993a7bde1357a0567803a80467c8ce1a4/python-lzf-0.2.4.tar.gz
Installing collected packages: python-lzf
  Running setup.py install for python-lzf ... done
Successfully installed python-lzf-0.2.4

好了,安装的工作都已经完成了,下面就是使用语法了: Usage: rdb [options] dump.rdb Example : rdb –command json -k “user.*” /var/redis/6379/dump.rdb Options: -h, –help #显示此帮助消息并退出; -c FILE, –command=FILE #指定rdb文件; -f FILE, –file=FILE #指定导出文件; -n DBS, –db=DBS #解析指定数据库,如果不指定默认包含所有; -k KEYS, –key=KEYS #指定需要导出的KEY,可以使用正则表达式; -o NOT_KEYS, –not-key=NOT_KEYS #指定不需要导出的KEY,可以使用正则表达式; -t TYPES, –type=TYPES #指定解析的数据类型,可能的值有:string,hash,set,sortedset,list;可以提供多个类型,如果没有指定,所有数据类型都返回; -b BYTES, –bytes=BYTES #限制输出KEY大大小; -l LARGEST, –largest=LARGEST #根据大小限制的top key; -e ESCAPE, –escape=ESCAPE #指定输出编码,默认RAW;

转换rdb文件成json格式

代码语言:javascript
复制
[root@VM_54_118_centos redis-rdb-tools]# rdb --command json /wjqdata/redis/rdb/dump.rdb > /wjqdata/redis/rdb/dump.json

查看转化后的json文件

四、生成内存报告

生成CSV格式的内存报告。包含的列有:数据库ID,数据类型,key,内存使用量(byte),编码。内存使用量包含key、value和其他值。 注意:内存使用量是近似的。在一般情况下,略低于实际值。可以根据key或数据库ID或数据类型对报告的内容进行过滤。 内存报告有助于检测是否是应用程序逻辑导致的内存泄露,也有助于优化reids内存使用情况。

代码语言:javascript
复制
[root@VM_54_118_centos rdb]# rdb -c memory /wjqdata/redis/rdb/dump.rdb --bytes 128 -f /wjqdata/redis/rdb/dump_memory.csv

输出字段说明: database :key在redis的db type :key类型 key :key值 size_in_bytes :key的内存大小(byte) encoding :value的存储编码形式 num_elements :key中的value的个数 len_largest_element :key中的value的长度 expiry :key过期时间

按键值大小排序

代码语言:javascript
复制
[root@VM_54_118_centos rdb]# awk -F',' '{print $4,$2,$3,$1}' dump_memory.csv | sort  > dump_memory_csv.sort

分析内存快照 直接将CSV的数据导入到MySQL,这样就可以利用sql语句很方便的对Redis的内存数据进行各种分析了,导入方法自行百度。 数据导入以后,接下来想怎么分析就怎么分析了,举几个简单的例子:

1、查询key的个数

select count(*) from dump_memory;

2、查询总的内存占用

select sum(size_in_bytes) from dump_memory;

3、查询内存占用最高的10个key

select * from dump_memory order by size_in_bytes desc limit 10;

4、查询value个数1000个以上的list

select * from dump_memory where type=’list’ and num_elements > 1000;

通过使用 redis-rdb-tools + mysql的方式,可以方便的对 redis 实例的内存情况进行静态的分析。整个过程也比较简单,获取到 rdb 之后即可。能够帮助排除业务中潜在的风险点,找到业务性能瓶颈。

五、单个key所使用的内存量

有时候,需要查询某个key所使用的内存。如果全部导出来在查找将是很愚蠢且耗时的。对于这种情景,可以使用redis-memory-for-key命令。 redis-memory-for-key需要依赖redis-py包。

代码语言:javascript
复制
[root@VM_54_118_centos ~]# redis-memory-for-key -s 10.66.179.211 -p 6379 -a crs-pte25xxx:XXXXX name
Key                             name
Bytes                           64
Type                            string

六、比较RDB文件

使用–command diff选项,并通过管道来进行排序。

代码语言:javascript
复制
[root@VM_54_118_centos rdb]# rdb --command diff /wjqdata/redis/rdb/dump1.rdb | sort > dump1.txt
[root@VM_54_118_centos rdb]# rdb --command diff /wjqdata/redis/rdb/dump2.rdb | sort > dump2.txt

使用kdiff3工具来进行比较,kdiff3是图形化的工具,比较直观。kdiff3工具比较两个或三个输入文件或目录。 安装kdiff3(需要epel源)

代码语言:javascript
复制
[root@VM_54_118_centos ~]# yum install kdiff3
[root@VM_54_118_centos rdb]# kdiff3 dump1.txt dump2.txt

PS:rdbtools还有很多其他功能,具体看官网即可。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA的辛酸事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、rdbtools工具介绍
  • 二、redis-rdb-tools 安装
  • 四、生成内存报告
  • 五、单个key所使用的内存量
  • 六、比较RDB文件
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档