Skip to content

SSD数据存储格式

lijingcheng edited this page Dec 21, 2017 · 1 revision

元数据key

每个元数据key代表一个redis key.

编码结构:

M | key

  • M表示这是一个元数据key
  • key对应redis中的原始key名称

元数据value

Hash/Set/Zset元数据value

编码结构:

type | version | deleted flag | len

  • type(1 byte):当前版本key的类型(hash/set/zset),分别对应H、S、Z
  • version(2 bytes):当前key哪个版本是有效的,其他的版本则是需要删除的
  • deleted flag(1 byte):当前版本的key是否已被删除(字符'D'表示该key被删除,字符'E'表示该key未被删除)
  • len(8 bytes):当前版本key的子元素个数

List元数据value

编码结构:

type | version | deleted flag | len | left | right

  • type为L
  • left(8 bytes)为list最左节点元素的序号
  • right(8 bytes)为最右节点元素的序号

String元数据value

编码结构:

type | version | deleted flag | value

  • type为k

子元素key

每个子元素key表示一个redis复合类型key(hash/set/zset/list)的子元素。

Hash/Set/Zset子元素编码结构:

type | keylen | key | version | field

  • type为S,S表示这是一个子元素key
  • version指明这个元素是哪个版本的key,如果与元信息key的meta value中的版本(version)不一致,则表示这是一个已删除但还未清理的key。 每个待清理的key版本会对应一个上面所述的D开头的标记key。

List子元素编码结构:

S | keylen | key | version | seq

  • 其中,seq(8 bytes)为该元素插入序号

zset分数子元素编码结构:

Z | keylen | key | version | score | field

子元素value

编码结构:

value