Redis跳表

Redis跳表

  • 跳表是一种有序数据结构,它通过在每个节点维持多个指向其他节点的指针,从而达到快速访问节点的目的

  • 跳表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点

  • 大部分人时候,跳表的效率可以和平衡树媲美,而且跳表的实现更方便简单

  • redis只在两个地方使用到了跳表,一个是实现有序集合键,另一个实在集群节点中用作内部数据结构

  • 跳表的实现:

    • 跳表由zskiplistNode和zskiplist两个结构定义

    -在这里插入图片描述

    • zskiplist:

      • header表示表头节点

      • tail表示表尾节点

      • level表示节点的最大层数

      • length:跳表的节点数量(不包含表头节点)

      • typedef struct zskiplist {
            //表头节点和表尾节点
            struct zskiplistNode *header, #tail;
            //表中节点数量
            unsigned long lenth;
            //最大的层数
            int level;
            
        } zskiplist
        
    • zskiplistNode:

      • level(层):每层都带有两个属性:前进指针和跨度。节点用L1、L2标记各个层

      • backward(后退指针):节点中用BW标记节点的后退指针,它指向当前指针的前一个指针。在程序从表尾向表头遍历时会使用

      • score(分值):各个节点中的1.0、2.0是节点所保存的分值。在跳表中,各个节点按各自的分值从小到大排列,若分值相同,会比较成员对象在字典序中的大小来进行排序,小的排前面。所以说节点对象是不能重复的

      • obj(成员对象):各个节点中的O1,O2是节点所保存的成员对象

      • typedef struct zskiplistNode {
            //后退指针
            struct zskiplistNode *backward;
            //分值
            double score;
            //成员对象
            robj *obj;
            //层
            struct zskiplistLevel {
                //前进指针
                struct zskiplistNode *forward;
                //跨度
                umsigned int span;
            } level;
              
        } zskiplistNode
        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SCI二区|鲸鱼优化算法(WOA)原理及实现【附完整Matlab代码】

目录 1.背景2.算法原理2.1算法思想 3.结果展示4.参考文献5.代码获取 1.背景 2016年,S Mirjalili受到自然界座头鲸社会行为启发,提出了鲸鱼优化算法(Whale Optimization Algorithm, WOA)。 2.算法原理 WOA模拟了座头鲸的社会行为…

[linux]如何跟踪linux 内核运行的流程呢

前面已经可以把内核编译出来,但是作为技术狗想看到内核是怎么运行的怎么办? 内核很多代码都是C语言写的,那简单,添加2行代码: include/linux/printk.h 529和530原来的: #define pr_info(fmt, ...) \ …

App UI 风格打造独特体验

App UI 风格打造独特体验

Python第二语言(十三、PySpark实战)

目录 1.开篇 2. PySpark介绍 3. PySpark基础准备 3.1 PySpark安装 3.2 掌握PySpark执行环境入口对象的构建 3.3 理解PySpark的编程模型 4. PySpark:RDD对象数据输入 4.1 RDD对象概念:PySpark支持多种数据的输入,完成后会返回RDD类的对…

HCIA4以太网基础VLAN与接口类型

1.VLAN基本概念 如下图,一台未配置的交换机,所有接口属于同一个广播域。那么这四台PC只要属于同一个IP子网,那么PC间可互相访问。同广播域中任一PC只要发送一个广播数据帧,那么其他三个PC都会收到,并且耗费资源来处理…

基于Django和Vue的商城管理系统

文章目录 前言一、系统运行结果二、相关技术简介三、系统设计四、系统测试五、总结 前言 近年来,互联网技术的飞速发展极大地改变了人们的生活方式。网络购物作为一种新的购物模式,因其方便、快捷、选择多样等优点,迅速普及。为了满足人们日…

FPGA+金融|硬件行情加速系统 打造极速交易场景

会议时间:2024年06月20日(周四)下午13:50 FPGA金融|硬件行情加速系统 打造极速交易场景_中科亿海微_芯有灵犀 智创未来

TF-IDF算法教程

前言 TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本分析技术,广泛应用于信息检索和文本挖掘领域。它是一种统计方法,用于评估一个词语在一个文档中的重要程度。TF-IDF的核心思想是:如果一个词语…

vue3之toRefs

import { reactive, toRefs } from vue;export default {setup() {// 创建一个响应式对象const state reactive({count: 0,name: Vue 3});// 使用toRefs将响应式对象的属性转换为响应式引用const refs toRefs(state);// 返回响应式引用,以便在模板中使用return {.…

【iOS】KVC相关总结

目录 1. 什么是KVC?2. 访问对象属性常用方法声明基础使用KeyPath路径多值操作 3. 访问集合属性4. 集合运算符自定义集合运算符 5. 非对象值处理访问基本数据类型访问结构体 6. 属性验证7. 设值和取值原理基本的Getter搜索模式基本的Setter搜索模式NSMutableArray搜索…

maven引入依赖时莫名报错

一般跟依赖的版本无关,会报出 Cannot resolve xxx 的错误。 这种情况下去IDEA的setting中找maven的仓库位置 在仓库中顺着包路径下寻找,可能会找到.lastUpdated 的文件,这样的文件一般是下载失败了,而且在一段时间内不再下载&…

docker 部署nginx多级子域名(三级四级...)映射不同web项目,访问不同路径地址

一、背景 只有一台服务器,一个顶级域名,现在需要根据不同子域名访问不同web项目,比如 # 管理后台 cms.biacu.com# 客户端h5 h5.biacu.com# 四级域名 h5.s.biacu.com同时,不同web项目放在不同位置 二、 1、在云服务器上&#x…

组织创新|AI赋能敏捷实践,助力企业敏捷转型

在工业5.0时代,随着项目变得越来越复杂,对效率的需求也在增长,致力于敏捷转型的组织正在寻求创新的解决方案来应对常见的挑战:工作量不平衡、低效的任务分配和知识孤岛等等。对此,AI等尖端技术的潜力可以帮助实现更高效…

2024 年十大关键渗透测试发现:您需要了解的内容

编辑信息技术 (IT) 专业人员在坏人之前发现公司弱点的最有效方法之一就是渗透测试。通过模拟现实世界的网络攻击,渗透测试(有时称为 pentests)可以提供有关组织安全状况的宝贵见解,揭示可能导致数据泄露或其他安全事件的弱点。 自…

通信设备的网卡

一、网卡的作用 将计算机或者路由器连接到传输介质上的接口,传输介质可以是有线也可以是无线的。 (1)计算机的网卡 现在的计算机大多有两个网卡,一个是有线网卡一个无线网卡,比如以我们的台式电脑为例 台式电脑千兆网…

【智能算法应用】基于混合粒子群-蚁群算法的多机器人多点送餐路径规划问题

目录 1.算法原理2.数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】粒子群算法(PSO)原理及实现 配餐顺序: 采用混合粒子群算法 || 路径规划: 采用蚁群算法 2.数学模型 餐厅送餐多机器人多点配送路径规划&…

基于注意力的MIL

多实例学习是监督学习的一种变体,其中单个类标签被分配给一袋实例。在本文中,作者将MIL问题描述为学习bag标签的伯努利分布,其中bag标签概率通过神经网络完全参数化。此外,提出了一种基于神经网络的置换不变聚合算子,该…

最实用的AI软件开发工具CodeFlying测评

就在上个月,OpenAI宣布GPT-4o支持免费试用,调用API价格降到5美元/百万token。 谷歌在得到消息后立马将Gemini 1.5 的价格下降到0.35美元/百万token。 Anthropic的API价格,直接干到了0.25美元/百万token。 国外尚且如此,那么国内…

6.13长难句打卡

Hard times may hold you down at what usually seems like the most inopportune time, but you should remember that they won’t last forever. 艰难时刻可能会在你最不顺心的时刻让你低迷,但请相信,它们不会永远持续下去。

数据结构逻辑

一:逻辑关系 1、线性关系 2:树型关系 3:图像关系 二:存储关系 1:顺序存储、数据在存储中会开辟一块连续的空间进行存储。一般使用数组来存储数据 2:链式存储、数据在内存中不需要开辟连续的空间进行存储 3…