题目
介绍 Redis 的 skiplist
答案
什么是跳跃表可以直接看这里:[https://itmtx.cn/question/335](https://itmtx.cn/question/335) ## Redis skiplist 的定义 **跳跃表 skiplist**: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/img/20220609161406.png) **跳跃表节点 zskiplistNode**: ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/img/20220609161417.png) `obj`(成员对象):节点所保存的成员对象 `backward`(后退指针):每个节点都带有一个高度为 1 层的后退指针,用于从表尾方向向表头方向迭代:当执行 ZREVRANGE 或 ZREVRANGEBYSCORE 这类以逆序处理有序集的命令时,就会用到这个属性 `score`(分值):在跳跃表中,节点 zskiplistNode 按各自所保存的分值从小到大排列 `level[]`(层):每个层都带有两个属性,前进指针 forward 和跨度 span - forward 用于访问同一层的下一个节点(后继节点) > **所以 redis skiplist 也是个双端链表**,`backward`与 `forward` 是构成双端链表的指针 - 跨度记录了 forward 所指向节点和当前节点的距离 ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/img/20220609161527.png) 程序可以通过这些层来加快访问其他节点的速度,一般来说,层的数量越多,访问其他节点的速度就越快