Redis 设计草稿 #2(历史)
Redis 早期编写的 RDB 格式设计
Redis 堆栈 | Redis 社区版 |
---|
注意:本文档由 Redis 的创建者 Salvatore Sanfilippo 在 Redis 开发初期(约 2013 年)编写,作为一系列设计草案的一部分。保留此内容是为了历史价值。
Redis 设计草案 2 -- RDB 版本 7 信息字段
- 作者: Salvatore Sanfilippo
antirez@gmail.com
- GitHub 问题 #1048
修订历史
1.0,2013 年 4 月 10 日 - 初稿。
概述
Redis RDB 格式缺少向 RDB 文件添加信息字段的简单方法 不会导致向后兼容性问题,即使添加了元数据 不需要才能从 RDB 文件加载数据。
例如,由于本文档中指定的 info 字段,它将 可以向 RDB 添加信息,例如文件创建时间、Redis 版本 生成文件和任何其他有用信息,其方式不是 要正确处理 RDB 版本 7 文件,每个字段都是必需的。
此外,只需进行最少的更改,就可以向 RDB 版本 7 添加支持 Redis 2.6 实际上没有支持额外的字段,只是跳过了 它们在加载 RDB 文件时。
如果需要,RDB 信息字段可能具有语义含义,以便存在 的字段可以添加有关 RDB 中指定的数据集的信息 文件格式,但是当需要正确解码 INFO 字段时 为了理解和加载 RDB 文件的数据集内容, 必须增加 RDB 文件格式,以便以前版本的 Redis 不会 尝试加载它。
但是,目前 info 字段设计为仅包含额外的 信息,这些信息对加载数据集没有用,但可以更好地指定 RDB 文件的创建方式。
信息字段表示
RDB 格式 6 具有以下布局:
- 一个 9 字节的魔术 “REDIS0006”
- 键值对
- EOF作码
- CRC64 校验和
RDB 格式 7 的建议是立即添加可选字段 在前 9 字节 magic 之后,因此新格式将是:
- 一个 9 字节的魔术 “REDIS0007”
- 信息字段 1
- 信息字段 2
- ...
- 信息字段 N
- 信息字段字段结束
- 键值对
- EOF作码
- CRC64 校验和
每个 info 字段都具有以下结构:
- 一个 16 位标识符
- 64 位数据长度
- 指定确切长度的数据段
标识符和数据长度都存储在 little endian 字节中 订购。
特殊标识符 0 表示没有其他信息字段,并且 RDB 文件的其余部分包含键值对。
信息字段的处理
程序可以简单地跳过它不理解的每个 info 字段,只要 的 RDB 版本与它能够加载的版本匹配。
信息字段 ID 和内容的规范。
信息字段 0 -- 信息字段的结尾
这只是意味着不再需要处理 info 字段。
信息字段 1 -- 创建日期
此字段表示创建 RDB 文件的 unix 时间。 unix 时间的格式是一个 64 位的小端整数,表示 秒自 1970 年 1 月 1 日以来。
信息字段 2 -- Redis 版本
此字段表示包含 Redis 版本的以 null 结尾的字符串 ,如 Redis version INFO 字段所示。