Redis 学习 ---- 5.跳跃表

  1. 和链表、字典等数据结构被广泛地应用在Redis内部不同,Redis只在俩个地方用到了跳跃表,一个是实现有序集合键,另一个是在集群结点中用作内部数据结构,除此之外,跳跃表在Redis里面没有其他用途。
  2. 跳跃表(skiplist)是一种有序数据结构,他通过在每个结点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。
  3. 跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找
  4. 在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树更为简单,所以有不少程序都使用跳跃表来代替平衡树。
  5. Redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员是比较长的字符场时,Redis就会使用跳跃表作为有序集合键的底层实现。
  6. Redis的跳跃表由redis.h/zskiplistNode 和 redis.h/zskiplist俩个结构定义
  7. typedef struct zskiplistNode {
        robj *obj;
        double score;
        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;

    重点回顾
  8. 跳跃表是有序集合的底层实现之一
  9. Redis的跳跃表由zskiplist和zskiplistNode俩个结构组成
  10. 每个跳跃表结点的层高都是1至32之间的随机数。
  11. 在同一个跳跃表中,多个节点可以包含相同的分值,但每个结点的成员对象必须是唯一的。
  12. 跳跃表中的结点按照分值大小进行排序,当分值相同时,节点按照成员对象大小进行排序

你可能感兴趣的:(Redis 学习 ---- 5.跳跃表)