定义
跳肤表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的自的。
跳跃表支持平均O(1ogN、最坏ON复杂度的节点查找,还可以通过顺序性操作来批量处理节点。
在大部分情况下,跳肤表的效率可以和平衡树相美,并且因为跳肤表的实现比平衡树要来得更为简单,所以有不少程序都使用跳肤表来代替平衡树。
Redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员(member)是比较长的字符串时,Redis就会使用跳跃表来作为有序集合键的底层实现。
内部实现
Redis的跳跃表由redis.h/zskiplistNode和redis.h/zskiplist两个结构定义,其中zskiplistNode结构用于表示跳跃表节点,而zskiplist结构则用于保存跳跃表节点的相关信息。
跳跃表节点
``
typedef struct zskiplistNode{
//层
struct zskiplistLevel {
// 前进指针
struct zskiplistNode *forward ;
// 跨度
unsigned int span ;
}level[] ;
// 后退指针
struct zskiplistNode backward ;
//分值
doublescore
/成员对象
robjobj&#x