数据结构
/* ZSETs use a specialized version of Skiplists */ typedef struct zskiplistNode { sds ele; double score; struct zskiplistNode *backward; struct zskiplistLevel { struct zskiplistNode *forward; unsigned long span; } level[]; } zskiplistNode; typedef struct zskiplist { struct zskiplistNode *header, *tail; unsigned long length; int level; } zskiplist; typedef struct zset { dict *dict; zskiplist *zsl; } zset;
- score:分值,用于排序。
- backward:是第一层的前一个数据,即span=1。
- level[]:每一个层所代表的节点node。
- forward:该层级的下一个节点。
- span:到达该层级的下一个节点,实际跨越了多少个节点,也是方便用于zrange等排行榜查询的用处。
跳表性质
- 由很多层组成
- 每一层都是一个有序链表
- 最底层的链表包含所有元素
- 如果一个元素出现在第i层的链表中,则它在i-1层中也会出现。
- 上层节点可以跳转到下层。