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)

相关推荐

  • 组件优化性能

    技术组件优化性能 组件优化性能import React from "react";
    class Home extends React.Component {constructor(props) {sup

    礼包 2021年12月17日
  • kafka topic 需要建立吗(怎么启动kafka)

    技术怎样认识 Kafka本篇文章为大家展示了怎样认识 Kafka,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。今天我们来聊聊 Kafka ,主要是带你重新认识一下 Kafka,聊

    攻略 2021年12月15日
  • 怎么画中国地图,晚清中国地图是如何绘制的

    技术怎么画中国地图,晚清中国地图是如何绘制的清朝的地图绘制有三种方法,第一种是传统绘制法,以“计里画方”法(方里网法)为主怎么画中国地图;第二种是西方经纬网法;第三种是双重网格法。“计里画方”法,实质是地图投影中的方格投

    生活 2021年11月1日
  • Python列表的定义及使用方法是什么

    技术Python列表的定义及使用方法是什么这篇文章主要介绍“Python列表的定义及使用方法是什么”,在日常操作中,相信很多人在Python列表的定义及使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操

    攻略 2021年11月1日
  • 儒林外史王冕,儒林外史人物故事及性格

    技术儒林外史王冕,儒林外史人物故事及性格儒林外史人物故事性格儒林外史王冕:王冕
    1.王冕是历史上真实存在的人物,作者据此进行了改编。王冕在小说中具有重要的作用,在整个小说的人物塑造上,他奠定了作者理想人物的基本特点,正如

    生活 2021年10月21日
  • cmakelists文件如何写(cmakelists如何执行)

    技术怎么在CMakeLists.txt文件中包含Eigen本篇内容主要讲解“怎么在CMakeLists.txt文件中包含Eigen”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习

    攻略 2021年12月21日