redis-计算每个大key

本文介绍了如何使用rdbtools工具对Redis RDB文件进行内存分析、键值提取,并通过实例对比了rdb工具与rdb_bigkeys在效率上的差异。重点展示了通过命令行操作获取关键信息和优化内存占用的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、安装工具

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速度更快一些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值