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.hqwc.cn/news/522033.html

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

相关文章

k8s常用命令大全

k8s常用的命令 下面是一些常用的Kubernetes(K8s)命令,以及它们的简要说明。这些命令可以帮助您管理和操作Kubernetes集群中的资源。 集群管理命令: kubectl cluster-info: 显示集群的基本信息。 kubectl config use-context &l…

Doris-数据分区

数据分区:即将大表划分为小表,数据分区主要有两个级别:Partition和Bucket(Tablet)。 Partition:逻辑分区,按照一定规则将表按照行进行划分,每个部分就是一个Partition。 Bucket&…

Java开发与配置用到的各类中间件官网

开发配置时用到了一些官网地址,记录一下。 activemq 官网:ActiveMQ elk 官网:Elasticsearch 平台 — 大规模查找实时答案 | Elastic nginx 官网:nginx maven 官网:Maven – Welcome to Apache Maven nexus 官网&a…

MySQL-----视图

一 视图 ▶ 介绍 视图view是一个虚拟表,非真实存在,其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用视图名称即可获取结果集,并可以将其当作表来使用。 数据库中存放了视图的定义&…

修复 因 fstab 中UUID 错误导致系统无法正常工作的问题

操作系统: PVE 8.0 /debian 12 (bookworm) 问题症状:可以正常启动进入系统,但是系统盘以只读方式挂载 问题原因:/etc/fstab 中引导区的UUID 被错误修改导致 解决方法: 重启系统,在…

CPU设计实战-加载和存储指令(2)

目录 一 ll和sc指令说明 二 ll和sc指令的实现 1 llbit寄存器 2 译码阶段 3 访存阶段 4 Load相关问题 5 流水线在取指阶段暂停 本章介绍两个比较特殊的加载存储指令ll和sc,这两个指令的存在用于实现信号量机制。 信号量机制:在多线程中为了保证某个…

项目的搭建与配置

vue create calendar_pro 选择如下配置选项 安装 vue3 支持 vue add vue-next package.json 关闭 eslint 检测。 vue.config.js 配置跨域同源策略。 const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServe…

MyBatis-Plus如何娴熟运用乐观锁

欢迎来到我的博客,代码的世界里,每一行都是一个故事 MyBatis-Plus如何娴熟运用乐观锁 前言乐观锁的基本概念基本概念和原理:为何乐观锁是解决并发问题的有效手段: MyBatis-Plus中乐观锁的支持1. Version 注解:2. 配置乐…

深入浅出Redis(八):Redis的集群模式

引言 Redis是一款优秀的键值对、内存非关系型数据库,单机节点下的Redis存在无法保证高可用、容量不足等问题 上篇文章介绍的哨兵主要能够保证主从架构下Redis的可用性,但是仍然存在容量不足、推举新的主节点时不能访问Redis的问题,集群可水…

开发Chrome扩展插件

1.首先开发谷歌chrome扩展插件,没有严格的项目结构目录,但是需要保证里面有一个mainfest.json文件 (必不可少的文件)。在这个文件里有三个属性必不可少:name、version、mainfest_version; // 清单文件的版本,这个必须写…

jmap-各种option参数说明

基本情况 jmap(JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息…

sheng的学习笔记-AI-多分类学习:ECOC,softmax

目录:sheng的学习笔记-AI目录-CSDN博客 基本术语: 若我们欲预测的是离散值,例如“好瓜”“坏瓜”,此类学习任务称为“分类”(classification); 若欲预测的是连续值,例如西瓜成熟度0.95、0.37,…