跳跃表
Zset 是一个有序的链表结构,其底层的数据结构是跳跃表 skiplist,其结构如下:
typedef struct zskiplistNode { //成员对象 robj *obj; //分值 //后退指针 struct zskiplistNode *backward; //层 struct zskiplistLevel { struct zskiplistNode *forward;//前进指针 unsigned int span;//跨度 } level[]; } zskiplistNode; typedef struct zskiplist { //表头节点和表尾节点 struct zskiplistNode *header, *tail; //表中节点的的数量 unsigned long length; //表中层数最大的节点层数 int level; } zskiplist;
前进指针
用于从表头向表尾方向遍历。
后退指针
用于从表尾向表头方向回退一个节点,和前进指针不同的是,前进指针可以一次性跳跃多个节点,后退指针每次只能后退到上一个节点。
跨度
表示当前节点和下一个节点的距离,跨度越大,两个节点中间相隔的元素越多。
在查询过程中跳跃着前进。由于存在后退指针,如果查询时超出了范围,通过后退指针回退到上一个节点后仍可以继续向前遍历。
- 本文固定链接: https://www.phpmianshi.com/?id=210
- 转载请注明: admin 于 PHP面试网 发表
《本文》有 0 条评论