redis中的zset的原理

一、zset有序集合的原理
如果有序集合元素个数少于128个且元素值小于64字节,使用压缩列表(新版本已经废弃压缩列表改用listpack数据结构了)
如果不满足上述条件,采用跳表作为redis的底层数据结构

二、压缩列表

1.由连续内存块组成的顺序性数据结构
2.根据数据大小和类型的不同进行数据内存的分配
3.缺点:插入过大或过多的数据会导致“连锁更新”,影响访问性能

三、跳表

1.在链表的基础上改进而来的,是一种多层的有序链表。查找的平均时间复杂度为O(logN)
2.实现层级靠的是节点结构体中的zskiplistLevel结构体类型的level数组
3.调表查询过程:
(1)比较权重,小的话访问该层下一个节点
(2)比较SDS类型数据大小,小的话访问该层下一个节点
(3)以上两种都不满足的情况下,跳到当前节点的下一层
4.跳表节点层数设置
头结点直接创建最大层数(64),其他节点生成小于0.25的随机数就一直创建层,一旦随机数超过0.25就确定该节点层数
5.为什么用跳表不用平衡树
(1)内存占用方面更灵活
(2)范围查找更容易
(3)算法实现更容易

参考:图解Redis介绍

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

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

相关文章

漏洞复现-金和OA系列

漏洞复现-金和OA系列 🗡金和OA jc6 RCE金和OA GetTreeDate.aspx SQL注入【新】金和OA RssModulesHttp.aspx接口SQL注入漏洞复现C6-GetSgIData.aspx SQL注入金和OA C6 GetTreeDate.aspx SQL注入金和OA C6 GetTreeDate.aspx未授权金和OA JC6 OfficeServer 任意文件上传漏洞金和…

全栈之路-新坑就绪-星野空间

感觉自己的技术栈一直没有形成一个很好的闭环 开新坑,准备把自己的技术栈链路打通, Don‘t think too much, just act![得意]

QT中connect()的参数5:Qt::DirectConnection、Qt::QueuedConnection区别

原文链接:https://blog.csdn.net/Dasis/article/details/120916993 connect用于连接QT的信号和槽,在qt编程过程中不可或缺。它其实有第5个参数,只是一般使用默认值,在满足某些特殊需求的时候可能需要手动设置。 Qt::AutoConnect…

C++ 网络编程学习五

C网络编程学习五 网络结构的更新单例模式懒汉单例模式饿汉单例模式懒汉式指针智能指针设计单例类 服务器优雅退出asio的多线程模型IOServiceasio多线程IOThreadPoolepoll 和 iocp的一些知识点 网络结构的更新 asio网络层,会使用io_context进行数据封装,…

Git的基础使用

几条铁令!!!!! 切换分支前先提交本地的修改代码及时提交,提交过就不会丢遇到任何问题都不要删除文件目录,第一时间找人请教push前和merge前一定要pull保证代码为最新的,pull的时候一…

针对《Linux系统CUDA环境配置》一文的补充与学习记录

一、针对《Linux(Ubuntu)下适配Open3D_ML库的CUDA环境配置》一文的补充说明 ***1 Linux(Ubuntu)下适配Open3D_ML库的CUDA环境配置-CSDN博客一文虽然完成了Linux内核-NVIDIA显卡驱动-CUDA-cudnn的版本匹配并成功运行,但…

1.下载安装ESP32开发环境ESP-IDE

ESP32简介 ESP32介绍 说到ESP32,首先ESP32不是一个芯片,ESP32是一个系列芯片, 是乐鑫自主研发的一系列芯片微控制器。它主要的功能就是支持WiFi和蓝牙, ESP32指的是ESP32裸芯片。但是,“ESP32”一词通常指ESP32系列芯…

Python保留格式复制多个Excel工作表到汇总表并生成目录(附源码下载)

要实现这个功能,你可以使用openpyxl库来操作Excel文件。以下是一个简单的示例: 1. 首先,安装openpyxl库,如果你还没有安装的话。在命令行中输入以下命令进行安装: bash pip install openpyxl2. 然后,使用…

Unity之PUN实现多人联机射击游戏的优化

目录 🎮一、 跳跃,加速跑 🎮二、玩家自定义输入昵称 🍅2.1 给昵称赋值 🍅2.2 实现 🎮三、玩家昵称同步到房间列表 🍅3.1 获取全部玩家 🍅3.2 自定义Player中的字段 &#…

Altair® RapidMiner®数据分析与人工智能平台

无论您的组织处于数据旅程的哪个阶段,Altair RapidMiner 都能帮助您克服前进道路上的挑战性障碍。我们为成熟的数据分析团队提供现代化之路,也为刚刚起步的团队提供自动化之路。我们不需要您的组织从根本上改变人员、流程、计算环境或现有数据状况&#…

圈内大佬呕心之作,一年后斩获腾讯T3,这份Java学习笔记有多厉害

说这句话的人其实有一些误解,误解就在于,安逸的生活并不等于不需要奋斗,这要看你的家底。 某聪如果说要选择安逸的生活,他可以很安逸,因为他有了安逸的资本,而大部分的你,并没有这个资本&#…

SQL中的distinct的使用方法

1. distinct含义与使用方法 distinct用来查询不重复记录的条数,即用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段。 注意事项 distinct 【查询字段】,必须放…

压缩json字符串

GZIPOutputStream 需要关闭,而 ByteArrayOutputStream 不需要关闭。具体原因如下: GZIPOutputStream:GZIPOutputStream是一种过滤流,它提供了将数据压缩为GZIP格式的功能。当使用此类的实例写入数据时,它会对数据进行压…

L1-039 古风排版(C++)

中国的古人写文字&#xff0c;是从右向左竖向排版的。本题就请你编写程序&#xff0c;把一段文字按古风排版。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;<100&#xff09;&#xff0c;是每一列的字符数。第二行给出一个长度不超过1000的非空字符串&a…

阿里云数据湖存储加速套件JindoData

计算存储分离已经成为云计算的一种发展趋势。在计算存储分离之前&#xff0c;普遍采用的是传统的计算存储相互融合的架构&#xff0c;但是这种架构存在一定的问题&#xff0c;比如在集群扩容的时候会面临计算能力和存储能力相互不匹配的问题。用户在某些情况下只需要扩容计算能…

[MYSQL数据库]- 索引

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、认识索…

opencalib的标定代码学习

一、源码 opencailb的源代码 代码地址:https://github.com/PJLab-ADG/SensorsCalibration/blob/master/README.md /** Copyright (C) 2021 by Autonomous Driving Group, Shanghai AI Laboratory* Limited. All rights reserved.* Yan Guohang <yanguohang@pjlab.org.cn…

力扣--课程表--bfs+dfs

整体思路&#xff1a; 这是一道拓扑序列的题目&#xff0c;我们将边的方向定义成从先修课指向后修课的方向&#xff0c;借一下官方的题解图片&#xff0c;我们需要判断的是形成的这个图结构是否存在环&#xff0c;如果存在环&#xff0c;那么代表不能完成所有课程的学习。 bfs思…

强推游戏爱好者!雾锁王国联机服务器部署教程

继《幻兽帕鲁》游戏爆火之后&#xff0c;与它同类型的《雾锁王国》也是强力刷屏&#xff0c;不分伯仲&#xff0c;在 Steam 上的评分一直稳定在“特别好评”&#xff0c;让小伙伴们很“上头”。就在两者游戏玩家反响爆火的同时&#xff0c;官方服务器人数爆满&#xff0c;卡顿频…

C# event的使用

在C#中&#xff0c;事件&#xff08;Event&#xff09;是一种特殊的成员&#xff0c;它允许类或对象以类型安全的方式向外界发出通知&#xff0c;表明某个特定的行为或状态变化已经发生。 订阅该事件的其他类可以定义处理方法来响应这些通知。 事件主要基于委托机制实现&…