tendis为了简化存储设计,所有记录不管类型都是用相同的格式,差异部分只在于value的UserValue上

key

SlotID | Type | DBID | PK | 0 | Version | SK | PK_LEN | Reserved

  • SlotID: 4字节,表示这个一级key的redis cluster slot id
  • DBID: 4字节,redis dbid
  • Type: 1字节

    1. RT_DATA_META:一级key
    2. RT_LIST_ELELIST二级key
    3. RT_HASH_ELE
    4. RT_SET_ELE
    5. RT_ZSET_S_ELE
    6. RT_ZSET_H_ELE
    7. RT_BINLOGbinlog
    8. RT_META:元数据
  • PK: 一级key

  • 0: 一个字节0,分隔符
  • Version: 变长整数,表示这个key的版本,为未来多版本记录做准备,目前暂未使用,恒为0.
  • SK: 成员key
  • PK_LEN: 变长整数,一级key的长度
  • Reserved: 一字节,保留字段,暂未使用,恒为1,表示记录格式版本号

value

TYPE | TTL | VERSION | VERSIONEP | CAS | PIECESIZE | TOTALSIZE | UserValue

  • TYPE: 记录的真正类型,1字节

    1. RT_KV:一级key普通string
    2. RT_LIST_META:一级key LIST
    3. RT_HASH_META: 一级key HASH
    4. RT_SET_META: 一级key SET
    5. RT_ZSET_META: 一级key ZSET
    6. RT_LIST_ELELIST二级key
    7. RT_HASH_ELE
    8. RT_SET_ELE
    9. RT_ZSET_S_ELE
    10. RT_ZSET_H_ELE
    11. RT_BINLOGbinlog
    12. RT_META:元数据
  • TTL:毫秒级过期时间,若为0表示不过期

  • VERSION:一级key的版本号,未来多版本使用,目前恒为0
  • VERSIONEP :RUID
  • CAS:cas语义使用,老版tendis的一个功能,目前可认为恒为0
  • PIECESIZE: 未来为了对超大key的分片存储使用,目前恒为0
  • TOTALSIZE: UserValue的实际大小
  • UserValue:实际存储的内容,不同类型有不同的实现,是解析不同类型的关键。