当前位置: 首页 > news >正文

redis zset底层实现

1.Redis zset底层实现

转载自:https://marticles.github.io/2019/03/19/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3Redis-Zset%E5%8E%9F%E7%90%86/

zset底层是压缩列表 + 跳表实现的。

跳表里面又由字典hash表 + 跳表实现。

什么时候用压缩列表?什么时候用跳表?

有两个参数控制:

当ziplist保存的元素的个数超过某个阈值或者元素的member的长度大于某个阈值的时候。就会用跳表

在这里插入图片描述

元素在压缩列表中存储的时候,是连续的,先存放member,再存放分数;而且是按分数从小到大进行排序。

在这里插入图片描述

/* zset结构体 */
typedef struct zset {// 字典,维护元素值和分值的映射关系dict *dict;// 按分值对元素值排序序,支持O(logN)数量级的查找操作zskiplist *zsl;
} zset;

跳表结构:字典hash表 + 跳表

1.字典hash表存储的是member到score的映射,可以做到O(1)时间复杂度来查找member对应的score值

2.跳表按score从小到大保存所有的元素。查找元素的时间复杂度可以达到O(logN)

虽然有两种结构,但是它们会通过指针来共享相同元素的member和score,因此并不会浪费内存。

在这里插入图片描述

http://www.lryc.cn/news/512819.html

相关文章:

  • go.Bar如何让hovertext显示为legend
  • 【Vue】分享一个快速入门的前端框架以及如何搭建
  • Flink源码解析之:如何根据JobGraph生成ExecutionGraph
  • UE(虚幻)学习(三) UnrealSharp插件中调用非托管DLL
  • leetcode 3219. 切蛋糕的最小总开销 II
  • vant 地址记录
  • Lua语言入门 - Lua常量
  • 在Microsoft Windows上安装MySQL
  • windows下vscode使用msvc编译器出现中文乱码
  • Git 解决 everything up-to-date
  • Windows配置cuda,并安装配置Pytorch-GPU版本
  • Neo4j 图数据库安装与操作指南(以mac为例)
  • 2024年12月个人工作生活总结
  • PHP:IntelliJ IDEA 配置 PHP 开发环境及导入PHP项目
  • 【嵌入式C语言】指针数组结构体
  • 国产数据库TiDB从入门到放弃教程
  • 深入解析 Spring 属性:spring.codec.max-in-memory-size
  • 在K8S中,如何查看Pod状态的详情?事件显示cpu不足如何处理?
  • ArcGIS教程(009):ArcGIS制作校园3D展示图
  • REDIS2.0
  • 算法练习——模拟题
  • 京东供应链创新与实践:应用数据驱动的库存选品和调拨算法提升履约效率
  • pytorch张量的fill_方法介绍
  • WAP短信格式解析及在Linux下用C语言实现
  • Linux的诞生与发展、体系结构与发行版本
  • 为什么Mysql用B+树作为索引
  • 探索 DC-SDK:强大的 3D 地图开发框架
  • C#高级篇 反射和属性详解【代码之美系列】
  • 算法 class 005 (对数器C语言实现)
  • windows系统安装完Anaconda之后怎么激活自己的虚拟环境并打开jupyter