bin文件 crc校验_redis rdb 文件格式详解

7cd958a32ff6bbedab314bc0d997c1ee.png

github 原文

使用 markdown 阅读会更好些。

吐槽下知乎 markdown 不支持表格。

dalei2019/redis-study​github.com
15b700572004d2745da78a29e51b1dc6.png

以下为正文。

redis rdb 文件格式详解

redis rdb 文件是 redis 在内存中所存储全部数据的二进制表示,结构非常紧凑。

在 redis 初始化或者迁移时,加载该文件,可以快速恢复原存储数据到 redis。

对作者来说了解 redis rdb 文件编码算法,对于学习二进制文件处理、压缩编码算法甚至合并或恢复损坏的 rdb 文件都很有帮助。

本文主要翻译自 redis-rdb-tools 的作者关于 rdb 文件格式的经典剖析,并在此基础上增加部分细节和示例。

文件整体结构

rdb 文件整体上可分为三个区域:头信息区、数据区、尾信息区。

描述符号约定

列出本文中用到的演示符号及其含义。

-/./空格/换行/行首数字      # 只为增加展示效果,实际编码中没有
52 45 44 49 53           # 示例数据为16进制
FE/FD/FA...              # 示例数据中的此类十六进制值代表 redis 的特殊操作符,参考「redis 操作符列表」
$xxxx                    # 代表一种数据类型或者编码格式,会在第二节进一步讲解
[]                       # 代表括号所选的范围是可选的,非必须存在

操作符列表

redis 操作符是一类特殊标记符。

通常用来揭示紧跟其后或之前的一段字节流的存储的内容类型。

redis 支持的操作符列表(第7版):

Byte Name Description
0xFF EOF rdb 文件结束符
0xFE SELECTDB redis 过期时间,使用秒表示。
0xFD EXPIRETIME redis 过期时间,使用秒表示。
0xFC EXPIRETIMEMS redis 过期时间,使用毫秒表示。
0xFB RESIZEDB redis dbsize,描述 key 数目和设置了过期时间 key 数目
0xFA AUX redis 元属性,可以存储任意的的 key-value 对

头信息区

头信息区用于描述 rdb 文件,如 rdb 版本、redis 版本、rdb 创建时间等信息。

该头信息在 redis 启动加载时会做校验,校验失败则不会加载数据区。

----------------------------  # rdb 是二进制格式,示例数据增加换行、空格、"-" 只是为解释方,实际编码中没有。示例数据均为16进制
52 45 44 49 53                # ascii值对应 "REDIS" 魔数字符
30 30 30 37                   # rdb 格式版本,示例值对应 ascii 码 0007 ,描述 rdb 格式为第7版
FA $字符串编码的key $字符串编码的value   # AUX 指令,描述 redis 属性,可存在多个 key-value 组合

数据区

rdb 文件实际数据存放区。也是编码最复杂的位置。采用数十种不同编码方法。

----------------------------                # 开始存储数据
FE 00                                       # FE 指定数据库编号,示例值 "00" 表示接下来是第 0 个库的数据。
FB $整数编码的数1 $整数编码的数2     # RESIZEDB 指令,描述总的 key 个数以及,有过期时间的 key 个数
-----------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值