翻译 | Redis RDB版本历史

2,438 阅读3分钟

(原文地址:github.com/sripathikri…

Redis dump文件是100%向后兼容的。老版本的转储文件格式将始终可以在新版本的Redis中使用。

版本9 - redis 5.0

添加以下内容:

  1. 新建流数据类型Stream
  2. RDB可以包含keys的LRU或LFU
  3. RDB可以包含模块AUX字段

版本8 - redis 4.0

添加以下内容:

  1. 新模块数据类型
  2. 排序集zset存储二进制双精度值而不是字符串

版本7-redis 3.2

添加以下内容:

  1. 新的QuickList编码
  2. 具有元数据的新的AUX字段
  3. 新的DBSIZE操作码

版本6-redis 2.8

在以前的版本中,ziplist使用整数的可变长度编码方案。

整数以16、32或64位存储。在此版本中,此可变长度编码系统已得到扩展。

添加以下内容:

  1. 整数0至12(包括两端)现在被编码为条目标头的一部分
  2. -128和127之间(包括两端)的数字存储在1个字节中
  3. -2 ^ 23和2之间的数字^ 23 -1(含两端)存储在3个字节中

发行ID:github.com/antirez/red…

要迁移到版本5:

  1. 在redis.conf中,设置list-max-ziplist -entries到0
  2. 重新启动Redis Server,并发出SAVE命令
  3. 编辑dump.rdb文件,并将标头中的rdb版本更改为REDIS0005

版本5-Redis 2.4

此版本在文件末尾引入了8字节的校验和(CRC-32)。如果在redis.conf中禁用了校验和,最后8个字节将为零。

问题ID:github.com/antirez/red…

迁移到版本4-

  1. 删除文件的最后8个字节(即在字节'0xFF'之后)
  2. 更改标头中的rdb版本到“ REDIS0004”

版本4

此版本引入了hashmap的新编码-“hashmap编码为Zip lists”。此版本还弃用了先前版本中使用的Zipmap编码。

“编码为ziplist的hashmaps”的编码类型=13。该值像ziplist一样进行解析,并且列表中的相邻条目被视为哈希图中的键=值对。

Issue ID:github.com/antirez/red…

要迁移到版本3-

  1. 在redis.conf中,将hash-max-ziplist-entries'设置为0
  2. 重新启动Redis Server,然后发布SAVE命令
  3. 编辑dump.rdb文件,并将头文件中的rdb版本更改为REDIS0003

版本3

此版本引入了以毫秒为单位精度的key过期时间。

较早的版本以“ 0xFD <4字节时间戳>”格式存储key过期时间。在版本3中,key过期时间存储为0xFC <8字节时间戳记>。此处,0xFD和0xFC是分别以秒和毫秒为单位指示key到期的操作码。

Issue ID:github.com/antirez/red…

要迁移到版本2-

  1. 如果不使用key过期,只需将标头中的版本更改为REDIS0002
  2. 如果使用key过期后,您仍然可以迁移,但是到期精度会有所损失。另外,迁移涉及到一个字节。
  3. 对于转储文件中的每个key=value对,您必须将“ 0xFC <8字节时间戳>”转换为“ 0xFD <4字节时间戳>”。
  4. 转换时间戳后,将标头中的版本更改为“ REDIS0002”

版本2

此版本引入了针对小型hashmaps,lists和sets的特殊编码。

具体来说,它引入了以下编码类型- REDIS_RDB_TYPE_HASH_ZIPMAP = 9

REDIS_RDB_TYPE_LIST_ZIPLIST = 10

REDIS_RDB_TYPE_SET_INTSET = 11

REDIS_RDB_TYPE_ZSET_ZIPLIST = 12

Commit:github.com/antirez/red…

迁移到版本1-

  1. 在redis.conf中,将以下属性设置为0hash-max-zipmap-entries,list-max-ziplist-entries,set-max-intset-entries,zset-max-ziplist-entries
  2. 重新启动Redis,并发出SAVE命令
  3. 编辑dump.rdb文件,并将标头中的rdb版本更改为REDIS0001