redis笔记:跳跃表

作者: 峰巢 | 来源:发表于2018-06-28 10:49 被阅读15次

本人博客同步发表,排版更佳

  1. 通过在每个节点中维持多个只想其他节点的指针,从而达到快速访问节点的目的。
  2. 作为redis有序集合键的底层实现之一(数量多,元素字符长)
  3. 跳跃表的原理可参考: http://www.cnblogs.com/acfox/p/3688607.html
  4. 不同的是:先从上层插入的,而不是底层,先随机判断插入的层数。

redis跳跃表的实现

/*
 * 跳跃表节点
 */
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;
  • 创建新跳跃表节点时,根据幂次定律随机生成一个介于1——32之间的值作为level高度的大小。类似与 http://www.cnblogs.com/acfox/p/3688607.html 中的抛硬币
  • 每个节点的高度都是1-32中的随机数
  • 多个节点可以包含相同的分值,但是成员对象必须是唯一的
  • 节点按照分值大小排序,但分值相同时,按照成员对象的大小排序

相关文章

  • redis笔记:跳跃表

    本人博客同步发表,排版更佳 通过在每个节点中维持多个只想其他节点的指针,从而达到快速访问节点的目的。 作为redi...

  • redis设计与实现读书笔记(二)

    本文内容为《redis设计与实现》一书学习笔记。本文主要概述五到八章内容。 第5章 跳跃表 跳跃表(skiplis...

  • 跳跃表

    redis中有序集合zset是用跳跃表实现的,所以今天学习了一下跳跃表。本文主要讲redis中跳跃表的实现。 一、...

  • redis跳跃表

    跳跃表(skiplist)是一种有序数据结果,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的...

  • Redis跳跃表

    本文摘抄自redis 源码剖析 跳跃表是一种随机化的数据,跳跃表以有序的方式在层次化的链表中保存元素,效率和平衡树...

  • 跳跃表 redis

    为什么选择跳跃表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一...

  • Redis 跳跃表

    什么是跳跃表 参考原文简单的说就是一种提升了查询性能的有序链表。链表好啊,插入和删除都是O(1),但是只能O(n)...

  • Redis设计与实现-笔记(二)

    数据结构与对象 跳跃表 跳跃表是有序集合的底层实现之一, 除此之外它在 Redis 中没有其他应用。 Redis ...

  • hbase 读书笔记——数据结构

    跳跃表 跳跃表广泛使用于KV数据库中,诸如Redis、LevelDB、HBase都把跳跃表作为一种维护有序数据集合...

  • Redis 跳跃表(skiplist)

    Redis基础类型中的有序集合、集群节点的内部数据结构用到了跳跃表(skiplist)。 5.1 跳跃表的实现 图...

网友评论

    本文标题:redis笔记:跳跃表

    本文链接:https://www.haomeiwen.com/subject/zdqgyftx.html