Redis实现了不定长压缩前缀的radix tree,用在集群模式下存储slot对应的的所有key信息。本文将详述在Redis中如何实现radix tree。
核心数据结构
raxNode是radix tree的核心数据结构,其结构体如下代码所示:
typedef struct raxNode {
uint32_t iskey:1;
uint32_t isnull:1;
uint32_t iscompr:1;
uint32_t size:29;
unsigned char data[];
} raxNode;
-
iskey:表示这个节点是否包含key
- 0:没有key
- 1:表示从头部到其父节点的路径完整的存储了key,查找的时候按子节点iskey=1来判断key是否存在
- isnull:是否有存储value值,比如存储元数据就只有key,没有value值。value值也是存储在data中
- iscompr:是否有前缀压缩,决定了data存储的数据结构
- size:该节点存储的字符个数
-
data:存储子节点的信息
-
- iscompr=0:非压缩模式下,数据格式是:
[header strlen=0][abc][a-ptr][b-ptr][c-ptr](value-ptr?)
,有size个字符,紧跟着是size个指针,指向每个字符对应的下一个节点。size个字符之间互相没有路径联系。
- iscompr&#
- iscompr=0:非压缩模式下,数据格式是: