java读取rdb_剖析Redis RDB文件

通过redis-cli中执行save或者bgsave可以得到RDB文件(文件名由配置文件中dbfilename指定,例如dbfilename "dump.rdb"),这个文件包含Redis实例中全量的数据,那么dump.rdb的文件格式大概是什么样的呢?

RDB文件定义

获取RDB文件

我们首先通过redis-cli中执行save得到dump.rdb文件,然后用WinHex打开这个文件:

fabfd6e35102b8459d43dc92580ee38e.png

dump.rdb.png

说明:导出RDB文件时整个Redis实例中db=0里有个string类型的username,值为afei;db=6里有个string类型的uname,值为root,且设置了失效时间;

剖析RDB文件

根据WinHex达到的dump.rdb文件一个一个字节剖析文件真实的内容,以52这个16进制数为例,其十进制数值为82,通过ASCII码对照表可知,82对应的字符是R,相应的:45->69->E,44->68->D,49->73->I,53->83->S,最终该RDB文件内容如下:REDIS

验证RDB文件定义

前面5个16进制52 45 44 49 53已经被验证为REDIS

30 30 30 36则表示RDB文件版本号

FE表示db选择器编码,00则表示选择编号为0这个db

00这个ASCII码对应的字符为NUT,即

08这个ASCII码对应的字符为BS,即BackSpace退格按键;

75 73 65 72 6E 61 6D 65 04 61 66 65 69 则表示:

说明:04这个ASCII对应的字符是EOT,表示文尾,end of transmission;所以username的值afei是另起一行;

FE表示db选择器编码,06则表示选择编号为6这个db

FC表示设置了毫秒级失效,接下来的8个字节表示失效时间的Unix时间戳;

4F D7 D3 E4 5D 01 00 00 00 表示失效时间Unix时间戳;

05这一个字节表示value的类型:string,hash,list ,set,sorted set;

75 6E 61 6D 65 04 72 6F 6F 74则表示:

FF表示RDB文件结束;

C7 41 31 D7 AA 1F 24 A2这8个字节表示整个RDB文件的rdbsum CRC 64;

作者:阿飞的博客

来源:https://www.jianshu.com/p/c210851d3558

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Java极客技术学习」https://www.javajike.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值