使用rdbtools工具来解析redis rdb文件
工欲善其事必先利其器,日常工作中,好的工具能够高效的协助我们工作;今天介绍一款用来解析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 安装
[root@VM_54_118_centos redis]# pip install rdbtools
2、从源码安装
[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
下面开始使用该工具,执行一个简单的命令
[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命令进行安装
解决方法:
# 在安装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格式
[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内存使用情况。
[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过期时间
按键值大小排序
[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包。
[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选项,并通过管道来进行排序。
[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源)
[root@VM_54_118_centos ~]# yum install kdiff3
[root@VM_54_118_centos rdb]# kdiff3 dump1.txt dump2.txt
使用rdbtools工具来解析redis rdb文件的更多相关文章
- Redis RDB文件
[Redis RDB文件] 1.RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). RDB 的优点 RDB 是一个非常紧凑(compact)的 ...
- redis rdb文件解析
http://www.ttlsa.com/python/redis-rdb-tools-analysis-of-reids-dump-file-and-memory-usage/ redis-rdb- ...
- Redis学习笔记(二)解析dump.rdb文件工具之redis-rdb-tools
https://github.com/sripathikrishnan/redis-rdb-tools 我这里使用docker搭建 docker搭建文档 https://rdbtools.com/do ...
- Redis rdb文件CRC64校验算法 Java实现
查看RDB文件结构,发现最后的8字节是CRC64校验算得,从文件头开始直到8字节校验码前的FF结束码(含),经过CRC64校验计算发现,貌似最后的8字节是小端模式实现的. 参考redis的crc64实 ...
- Redis RDB 分析工具 rdbtools 说明
背景 Redis是基于内存的KV数据库,内存作为存储介质,关注其内存的使用情况是一个重要指标,解析其内部的存储信息是给出优化方法和维护的最基本要求.解析内存有二种方法:第一个是通过scan遍历所有ke ...
- 如何解析 redis 的 rdb 文件
目录 安装工具 解析 redis 的 rdb 文件 命令行工具使用,先看 --help 生成内存报告 使用参数过滤想要的数据 比较两个 rdb 文件 查看一个 key 的内存使用情况 常见问题 FAQ ...
- Redis 数据恢复方法,redis-port 工具将自建 redis 的 rdb文件同步到云数据库
1. Redis 恢复的机制 如果只配置 AOF ,重启时加载 AOF 文件恢复数据: 如果同时配置了 RDB 和 AOF ,启动是只加载 AOF 文件恢复数据: 如果只配置 RDB,启动是将加载 d ...
- Golang 实现 Redis(11): RDB 文件解析
RDB 文件使用二进制方式存储 Redis 内存中的数据,具有体积小.加载快的优点.本文主要介绍 RDB 文件的结构和编码方式,并借此探讨二进制编解码和文件处理方式,希望对您有所帮助. 本文基于 RD ...
- Redis 源码简洁剖析 13 - RDB 文件
RDB 是什么 RDB 文件格式 Header Body DB Selector AUX Fields Key-Value Footer 编码算法说明 Length 编码 String 编码 Scor ...
随机推荐
- Spring Boot 构建电商基础秒杀项目 (七) 自动校验
SpringBoot构建电商基础秒杀项目 学习笔记 修改 UserModel 添加注解 public class UserModel { private Integer id; @NotBlank(m ...
- Nginx 返回响应过滤响应内容
陶辉94课 过滤模块 从下到上顺序 ngx_http_proxy_module 模块 Syntax: proxy_ignore_headers field ...; Default: — Contex ...
- Go语言类型(布尔、整型、数组、切片、map等)
1.基本类型 布尔类型:bool 注意:布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换. 整型:int8.byte(uint8).int16.int.uint.uintptr int.ui ...
- jenkins运行脚本生成HTML报告时遇到的问题
1.jenkins生成HTML报告 1)安装插件:HTML Publisher plugin 2)系统管理->插件管理->安装HTMLHTML Publisher plugin 2.job ...
- python+selenium+unnitest写一个完整的登陆的验证
import unittest from selenium import webdriver from time import sleep class lonInTest (unittest.Test ...
- Gulp 新手使用
Gulp 注意:gulp依赖于nodejs,在安装前要确保已经安装node环境,如为安装查看<windows系统下nodejs安装及环境配置>安装node环境. 1.全局安装 在命令行执行 ...
- JLOI2016 简要题解
「JLOI2016」侦查守卫 题意 有一个 \(n\) 个点的树,有 \(m\) 个关键点需要被监视.可以在其中一些点上插眼,在 \(i\) 号点上放眼需要花费 \(w_i\) 的代价,可以监视距离 ...
- ⌈洛谷1505⌋⌈BZOJ2157⌋⌈国家集训队⌋旅游【树链剖分】
题目链接 [洛谷] [BZOJ] 题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T ...
- Jmeter工具之上传图片,上传音频文件接口
https://www.jianshu.com/p/f23f7fe20bf3 互联网时代的来临,不同手机上安装的APP,还是PC端的应用软件或多或多都会涉及到图片的上传,那么在Jmeter工具如何模拟 ...
- [NOI2005]月下柠檬树(计算几何+积分)
题目描述 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔 地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思 索着人生的哲理. 李哲是一个喜爱思考的孩子,当他看 ...