Redis原理篇(SkipList)

一.概述

本质是双端链表,只不过在正向遍历时可以不一个一个遍历,而是可以跳着遍历。

怎么实现的呢,下面是SkipList源码

二.源码

1. zskiplist

意义:跳表

zskiplist里面有头指针和尾指针,节点数量,最大索引层级

2.zskiplistNode

意义:跳表的每个节点

zskiplistNode 里面有ele(节点存储的值,sds是动态字符串类型)

2.1 score

每个节点有个score权值,用来排序和查找,查找的时候将要查找的值先用与生成score一样的算法生成待查的score值,然后再根据每个节点的score值来查找该值

2.2 *backward

指向前一个节点的指针,注意,在倒序遍历时不能跳表

2.3 zskiplistLevel

zskiplistLevel是索引层级结构体数组,有level[1],level[2],level[15]等,每个结构体记录了该索引层级下的下一个节点的指针以及从当前节点按照该索引层级跳到下一节点的跨度

下面是一个结构图

 level数组里面的元素的forwad指向的是下一个节点的地址,而不是途中显示的level的地址。

三.总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/418667.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

acwing讲解篇之93. 递归实现组合型枚举

文章目录 题目描述题解思路题解代码 题目描述 题解思路 本题相当于二叉树的深度优先遍历,树的第i层表示第i个数选或不选,当选择了m次左节点后退出 我们记录当前递归的深度deep 然后用state进行状态压缩,state第i位是1表示选第i个数&#xff…

Maven 依赖传递和冲突、继承和聚合

一、依赖传递和冲突 1.1 Maven 依赖传递特性 1.1.1 概念 假如有三个 Maven 项目 A、B 和 C,其中项目 A 依赖 B,项目 B 依赖 C。那么我们可以说 A 依赖 C。也就是说,依赖的关系为:A—>B—>C, 那么我们执行项目 …

ubuntu设置每天定时关机

ubuntu设置每天定时关机 终端输入命令: sudo crontab -e输入密码,回车。 我这里使用nano作为编辑器,你可以选择vim。 在末尾输入以下命令: 59 23 * * * sudo -u root shutdown now设置:每天23:59分,电脑…

基于springboot+vue养老院管理系统

摘要 这是一个基于Spring Boot 和 Vue.js 的养老院管理系统的项目。该系统旨在提供一套全面的解决方案,以简化养老院的日常管理任务,包括居民信息管理、员工调度、医疗服务追踪、财务管理等。通过结合后端的Spring Boot框架和前端的Vue.js框架&#xff0…

Oracle 经典练习题 50 题

文章目录 一 CreateTable二 练习题1 查询"01"课程比"02"课程成绩高的学生的信息及课程分数2 查询"01"课程比"02"课程成绩低的学生的信息及课程分数3 查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩4 查询平均成绩小于…

VS Code + Python + Selenium 自动化测试基础-01

VS Code Python Selenium 自动化测试基础-01 让我们来讲一个故事为什么要写自动化开发前的准备工作牛刀小试开常用的web DriverAPI-定位元素id定位:find_element_by_id()name 定位:find_element_by_name()class 定位:find_element_by_class…

redis远程连接不上解决办法

问题描述: redis远程服务端运行在192.168.3.90计算机上,客户端计算机(ip:192.168.3.110)通过redsi-cli.exe客户端工具连接时,没有反应,连接不上。 如图所示: 解决步骤: 步骤一&…

Civil 3D安装教程,免费使用,带安装包和工具,一分钟轻松搞的安装

前言 Civil 3D是一款面向基础设施行业的建筑信息模型(BIM)解决方案。它为基础设施行业的各类技术人员提供了强大的设计、分析以及文档编制功能,广泛适用于勘察测绘、岩土工程、交通运输、水利水电、市政给排水、城市规划和总图设计等众多领域…

【高等数学之极限】

一、引言 我们先思考一下,上面三个表达式,是否可以将极限值直接代入求值,我们在计算之前需要先分析一下,如果将极限值代入,那么表达式将会变成什么形式? 经过上面的分析,我们发现第一个式子可以直接带入&a…

Python 中多线程与多处理之间的区别

一、说明 在本文中,我们将学习 Python 中多线程和多处理的内容、原因和方式。在我们深入研究代码之前,让我们了解这些术语的含义。 二、基本术语和概念 程序是一个可执行文件,它由一组执行某些任务的指令组成,通常存储在计算机的…

BGP Origin 属性控制选路试验

一、拓朴图: 二、配置步骤: 1、配置 IP 2、配置 IGP,我们这里用了静态,互相宣告了对端接口和 Loopback 0 3、配置 BGP 4、在 R1 上通过 BGP 宣告 1.1.1.1,查看 R2 的路由,发现两条 1.1.1.1 的路由&#x…

解决小程序字体在最左上角问题

问题如下 原因: 出现这种现象的原因是项目默认开启了Skyline渲染模式,因为Skyline渲染模式不支持原生导航栏,所以在json文件中设置的导航栏失效,文字就会向上移动,如果想要使用原生的导航栏,可以将app.jso…