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)

相关推荐

  • 使用AndroidX的坑有哪些

    技术使用AndroidX的坑有哪些这篇文章主要介绍“使用AndroidX的坑有哪些”,在日常操作中,相信很多人在使用AndroidX的坑有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”

    攻略 2021年11月10日
  • 3个方便的命令行网速度测试工具分别是什么

    技术3个方便的命令行网速度测试工具分别是什么这篇文章将为大家详细讲解有关3个方便的命令行网速度测试工具分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。用这三个开源

    攻略 2021年11月12日
  • docker容器源码怎样部署httpd用存储卷部署网站

    技术docker容器源码怎样部署httpd用存储卷部署网站这篇文章将为大家详细讲解有关docker容器源码怎样部署httpd用存储卷部署网站,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知

    攻略 2021年12月8日
  • 拉链表和快照表怎么更新数据(数据仓库的拉链表)

    技术数据仓库企业数仓拉链表如何制作​这篇文章主要为大家展示了“数据仓库企业数仓拉链表如何制作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“数据仓库企业数仓拉链表如何制作”这篇

    攻略 2021年12月24日
  • WEB、接口、APP自动化测试的看法有哪些

    技术WEB、接口、APP自动化测试的看法有哪些WEB、接口、APP自动化测试的看法有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 当故事看即可,

    攻略 2021年11月17日
  • 华为手机丢失,丢失的华为手机怎样定位

    技术华为手机丢失,丢失的华为手机怎样定位华为手机丢了可以定位找回华为手机丢失,以华为G9手机为例,操作步骤如下:1、在手机的设置中,找到高级设置,点击进入。
    2、在高级设置中,找到安全,点击进入。
    3、在安全界面,选择手

    生活 2021年10月31日