一、安装工具
pip install rdbtools
rdb工具地址:github地址
二、copy份线上 dump.rdb
三、开始分析
rdb -c memory -l 20 redis6379_database.rdb
四、参数解释
usage: usage: rdb [options] /path/to/dump.rdb
Example : rdb --command json -k "user.*" /var/redis/6379/dump.rdb
positional arguments:
dump_file RDB Dump file to process
optional arguments:
-h, --help show this help message and exit
-c CMD, --command CMD
Command to execute. Valid commands are json(转存成json), diff(比较rdb文件),
justkeys(只打印key), justkeyvals(只打印value), memory(计算近似内存) and protocol(使用protocol命令将RDB文件转换为redis协议流)
-f FILE, --file FILE # 结果输出到的文件,-f后面接文件名
-n DBS, --db DBS # 指定的数据库,不指定就是所有数据库
-k KEYS, --key KEYS # 指定key解析,可以是正则表达式,如abc*
-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
# 只输出内存排名前几的key
-e {raw,print,utf8,base64}, --escape {raw,print,utf8,base64}
# 解析成不同的编码
-x, --no-expire # 使用command protocol参数,从所有键中删除到期的key
-a N, --amend-expire N
# 使用command protocol参数,将N秒添加到key的到期时间
csv 字段详解
database:数据库编号
type:数据类型
key:键
size_in_bytes:使用的内存:包括键,值和任何其他开销
encoding:RDB编码类型
num_elements:key中的value的个数
len_largest_element:key中的value的长度
expiry:过期值
五、实践
1.查看所有key
rdb -c justkeys a.rdb -f a.txt
2.计算占用内存最大的5个key(注意这种的比较是在内存中,所以要保证你的内存大于rdb的大小)
rdb -c memory -l 5 a.rdb -f a.csv
3.查看内存占用大于等于多大的key并写入文件(为了解决2所产生的问题,这样可以生成结果之后再排序)
# 把内存占用大于等于102400000bytes的key写入到csv中,因为rdb是单线程的,利用不到多核,亲测了下,16GB的文件大概需要分析一小时
rdb -c memory -b 102400000 a.rdb -f a.csv
大佬文章:Redis RDB 分析工具 rdbtools 说明 - jyzhou - 博客园
go工具:github地址
go工具(rdb-bigkeys)安装和使用:安装方法
4.简单测试
# 测试一:
# set-a的内容如下
127.0.0.1:6379> smembers set-a
1) "a3"
2) "a1"
3) "a2"
#1.rdb工具的结果
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry
0,set,set-a,284,hashtable,3,2,
#2.rdb_bigkeys工具的结果
database,type,key,size_in_bytes,num_elements,largest_element,largest_element_size_in_bytes,expire_datetime
0,set,set-a,6,3,1,2,
# 结论一:
# 从目前的结果来看。go计算的占用结果似乎更准确一些
# 测试二:
# dump2.rdb的大小为923M
date&&./rdb_bigkeys --bytes 1024 --file bigkeys_6379.csv --sep 0 --threads 2 ../dump2.rdb&&date
2023年 03月 01日 星期三 10:54:57 CST
2023年 03月 01日 星期三 10:55:14 CST
date&&rdb -c memory -b 1024 -f a.csv ../dump2.rdb&&date
2023年 03月 01日 星期三 10:56:50 CST
2023年 03月 01日 星期三 11:01:48 CST
# 结论二:
解析一个923M的rdb文件,rdb_bigkeys用时为17s,rdb用时为4分58秒,最终解析的key的大小差距并不是太大,几十到几百bytes,所以rdb并不会有太大的误差,但是rdb_bigkeys速度更快一些