Redis 设计草案 #2(历史)

Redis 早期编写的 RDB 格式设计

注意:此文档由 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 文件中数据所必需的。

例如,借助本文档中指定的字段信息,可以将文件创建时间、生成该文件时的 Redis 版本以及任何其他有用信息添加到 RDB 中,而无需每个字段都是 RDB 版本 7 文件正确处理所必需的。

此外,只需进行最小的更改,就可以在 Redis 2.6 中添加对 RDB 版本 7 的支持,而无需实际支持其他字段,而是在加载 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 版本

此字段表示包含生成文件的 Redis 版本的空终止字符串,如 Redis 版本 INFO 字段中所示。

对本页进行评分