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)

相关推荐

  • 在IDEA中如何部署一个简单的考勤补签功能

    技术在IDEA中如何部署一个简单的考勤补签功能这篇文章主要介绍了在IDEA中如何部署一个简单的考勤补签功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 

    攻略 2021年11月24日
  • 权限设置在哪里,设置应用管理怎么开权限

    技术权限设置在哪里,设置应用管理怎么开权限工具/原料:小米6手机权限设置在哪里、手机管家 小米6手机应用管理权限开启操作步骤如下: 1、在手机桌面找到【手机管家】,点击进入【手机管家】;
    2、在【手机管家】界面,

    生活 2021年10月20日
  • C++中signed main和int main有哪些区别

    技术C++中signed main和int main有哪些区别这篇文章给大家分享的是有关C++中signed main和int main有哪些区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

    攻略 2021年12月10日
  • php不能设置shell的命令(php 操作windows命令没有权限)

    技术如何解决命令行显示php不是内部命令的问题这篇文章主要介绍如何解决命令行显示php不是内部命令的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 命令行显示php

    攻略 2021年12月19日
  • hibernate中出现unknown entry问题怎么办

    技术hibernate中出现unknown entry问题怎么办小编给大家分享一下hibernate中出现unknown entry问题怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这

    攻略 2021年12月8日
  • 河南十三届ICPC部分题解

    技术河南十三届ICPC部分题解 河南十三届ICPC部分题解A.祝融传火
    输入之后,暴力枚举\((x,y)\)判断即可
    #include bits/stdc++.h
    using namespace std

    礼包 2021年10月20日