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)

相关推荐

  • 科目一考什么,驾照科目一考试技巧与口诀

    技术科目一考什么,驾照科目一考试技巧与口诀1科目一考什么、题目里有“口”的选50米,有“站”的选30米,叫“口五站三 剩下的全选150米,没有150的选最大。判断题全对。 2、有关公里的题目:城市街道选50公里,其余有3

    生活 2021年10月23日
  • Python的logger怎么配置

    技术Python的logger怎么配置这篇文章主要介绍“Python的logger怎么配置”,在日常操作中,相信很多人在Python的logger怎么配置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

    攻略 2021年12月1日
  • java如何实现单机接口限流

    技术java如何实现单机接口限流这篇文章主要为大家展示了“java如何实现单机接口限流”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java如何实现单机接口限流”这篇文章吧。

    攻略 2021年11月25日
  • 源码解析二 模型转换 export.py

    技术源码解析二 模型转换 export.py 源码解析二 模型转换 export.py基于最新yolov5-v6.01.重点2.相关函数1.重点一般使用规则:python export.py --dat

    礼包 2021年12月21日
  • 如何将Tibco Ent .对于(同JavaMessageService)Java消息服务代替JBoss-3.0.1RC1_Tomcat-4.0.4中的JBossMQ

    技术如何将Tibco Ent. for JMS代替JBoss-3.0.1RC1_Tomcat-4.0.4中的JBossMQ小编给大家分享一下如何将Tibco Ent. for JMS代替JBoss-3.0.1RC1_To

    攻略 2021年12月24日
  • java==和equalse的区别是什么

    技术java==和equalse的区别是什么这篇文章主要介绍“java==和equalse的区别是什么”,在日常操作中,相信很多人在java==和equalse的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好

    攻略 2021年11月24日