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字节
RT_DATA_META:一级key
RT_LIST_ELE:LIST二级key
RT_HASH_ELE:
RT_SET_ELE:
RT_ZSET_S_ELE:
RT_ZSET_H_ELE:
RT_BINLOG:binlog
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字节
RT_KV:一级key普通string
RT_LIST_META:一级key LIST
RT_HASH_META: 一级key HASH
RT_SET_META: 一级key SET
RT_ZSET_META: 一级key ZSET
RT_LIST_ELE:LIST二级key
RT_HASH_ELE:
RT_SET_ELE:
RT_ZSET_S_ELE:
RT_ZSET_H_ELE:
RT_BINLOG:binlog
RT_META:元数据
TTL:毫秒级过期时间,若为0表示不过期
- VERSION:一级key的版本号,未来多版本使用,目前恒为0
- VERSIONEP :RUID
- CAS:cas语义使用,老版tendis的一个功能,目前可认为恒为0
- PIECESIZE: 未来为了对超大key的分片存储使用,目前恒为0
- TOTALSIZE: UserValue的实际大小
- UserValue:实际存储的内容,不同类型有不同的实现,是解析不同类型的关键。