Redis的底层数据结构-跳表

技术Redis的底层数据结构-跳表 Redis的底层数据结构-跳表跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其它节点的指针,从而达到快速访问节点的目的。具有如下性质:1

Redis-skip表的底层数据结构

Skiplist是一种有序的数据结构,通过维护指向每个节点中其他节点的多个指针,可以快速访问节点。具有以下属性:

1.它由许多层组成;

2.每层是一个有序链表,从上到下排列,包含至少两个链表节点,即前头节点和后零节点;

3.最低的链表包含所有元素;

4.如果某个元素出现在某一层的链表中,该层下的所有链表也会出现(上一层的元素是当前层元素的子集);

5.链表中的每个节点包含两个指针,一个指向同一层中的下一个链表节点,另一个指向下一层中的同一链表节点;

Redis中的跳转表节点定义如下:

typedef结构zskiplistNode {

//图层

struct zskiplistLevel {

//正向指针

结构zskiplistNode *向前;

//span

无符号整数跨度;

}级别[];

//后指针

向后构造zskiplistNode *;

//分数

双重评分;

//成员对象

robj * obj

} zskiplistNode

多个跳转表节点形成跳转表:

typedef结构zskiplist{

//页眉节点和页脚节点

structz skiplistNode *头,*尾;

//表中的节点数

无符号长长度;

//表格中层数最多的节点的层数

int级别;

} zskiplist

(1)搜索:从顶层链表节点开始,如果比当前节点大,比当前级别的下一个节点小,那么向下看,也就是和当前级别的下一级节点的下一个节点进行比较,以此类推,直到找到底部的最后一个节点,如果找到,就返回,否则为空。

插入:首先确定要插入的层数。一种方法是假设抛硬币。如果是正的,就会累积,直到遇到负的一面。最后,记录正边数作为要插入的层数。当插入层数k确定后,需要从底层向k层插入新元素。

删除:在每个图层中找到包含指定值的节点,然后从链表中删除该节点。如果删除后只剩下两个节点,则删除该层。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/81987.html

(0)

相关推荐

  • C++ socket网络编程方法是什么

    技术C++ socket网络编程方法是什么本篇内容主要讲解“C++ socket网络编程方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ socket网络编程方

    攻略 2021年11月19日
  • 苹果手,苹果手音乐没声音怎么办

    技术苹果手,苹果手音乐没声音怎么办一)检查静音键
    1、在苹果手机正面左侧上有一个静音键苹果手,可以控制当前手机铃声。当发现手机没有提示声音时,请先检测是否打开了静音功能。
    (二)重新启动手机
    1、请长按苹果手机顶部的“电

    生活 2021年10月25日
  • 数据库中Oracle DB2随取几行的示例分析

    技术数据库中Oracle DB2随取几行的示例分析小编给大家分享一下数据库中Oracle DB2随取几行的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们

    攻略 2021年11月20日
  • 在营销过程中代理ip有的作用是什么

    技术在营销过程中代理ip有的作用是什么本篇内容主要讲解“在营销过程中代理ip有的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在营销过程中代理ip有的作用是什么”吧

    攻略 2021年11月2日
  • C++为什么在默认状态下明确定义单参数构造函数

    技术C++为什么在默认状态下明确定义单参数构造函数本篇内容介绍了“C++为什么在默认状态下明确定义单参数构造函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情

    攻略 2021年11月29日
  • 白凡士林的作用与用途,白凡士林可以用来护肤吗

    技术白凡士林的作用与用途,白凡士林可以用来护肤吗凡士林是当今世界性价比最高的护肤品,它的价格并不高,但是它的价值很高。因此有很多经济拮据却非常爱美的人会选择凡士林。不过,也有人担心凡士林会有副作用,担心用凡士林擦脸是不合

    生活 2021年10月19日