Redis 设计草案 #2 (历史版本)

Redis 早期编写的 RDB 格式设计

Redis 开源

注意:本文档由 Redis 的创建者 Salvatore Sanfilippo 在 Redis 开发早期(约 2013 年)编写,作为一系列设计草案的一部分。保留此文档供历史参考。

Redis 设计草案 2 -- RDB 版本 7 信息字段

修订历史

1.0, 2013 年 4 月 10 日 - 初始草案。

概述

Redis RDB 格式缺乏一种简单的方法来向 RDB 文件添加信息字段,而不会导致向后兼容性问题,即使从 RDB 文件加载数据不需要添加的元数据。

例如,由于本文档中指定的信息字段,可以向 RDB 添加信息,例如文件创建时间、生成文件的 Redis 版本以及任何其他有用信息,而 RDB 版本 7 文件并非必须正确处理每个字段。

此外,通过最少的更改,可以将 RDB 版本 7 支持添加到 Redis 2.6,而无需实际支持其他字段,只需在加载 RDB 文件时跳过它们即可。

如果需要,RDB 信息字段可能具有语义意义,因此该字段的存在可以添加有关 RDB 文件格式中指定的数据集的信息,但是,如果需要正确解码信息字段才能理解和加载 RDB 文件的数据集内容,则必须增加 RDB 文件格式,以便以前版本的 Redis 不会尝试加载它。

但是,当前的信息字段仅用于保存加载数据集没有用的其他信息,但可以更好地指定 RDB 文件的创建方式。

信息字段表示

RDB 格式 6 具有以下布局

  • 一个 9 字节的魔法字符串 "REDIS0006"
  • 键值对
  • 一个 EOF 操作码
  • CRC64 校验和

RDB 格式 7 的建议是在前 9 个字节的魔法字符串后立即添加可选字段,因此新格式将是

  • 一个 9 字节的魔法字符串 "REDIS0007"
  • 信息字段 1
  • 信息字段 2
  • ...
  • 信息字段 N
  • 信息字段 字段结束
  • 键值对
  • 一个 EOF 操作码
  • CRC64 校验和

每个信息字段都具有以下结构

  • 一个 16 位标识符
  • 一个 64 位数据长度
  • 一个指定长度的精确数据段

标识符和数据长度都以小端字节顺序存储。

特殊的标识符 0 表示没有其他信息字段,并且 RDB 文件的其余部分包含键值对。

信息字段的处理

只要 RDB 版本与程序能够加载的版本匹配,程序就可以简单地跳过它不理解的每个信息字段。

信息字段 ID 和内容的规范。

信息字段 0 -- 信息字段结束

这仅表示不再需要处理信息字段。

信息字段 1 -- 创建日期

此字段表示 RDB 文件的创建时间的 Unix 时间。 Unix 时间的格式是一个 64 位小端整数,表示自 1970 年 1 月 1 日以来的秒数。

信息字段 2 -- Redis 版本

此字段表示一个以 null 结尾的字符串,其中包含生成该文件的 Redis 版本,如 Redis 版本 INFO 字段中显示的那样。

评价此页
回到顶部 ↑