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文件加载数据不是必需的,也不会导致向后兼容性问题。

例如,由于本文档中指定的信息字段,可以以不需要每个字段的方式向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 版本

此字段表示一个以空字符结尾的字符串,包含生成文件的Redis版本,如Redis版本INFO字段中所示。

RATE THIS PAGE
Back to top ↑