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

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.kler.cn/a/462981.html

相关文章:

  • OpenNJet v3.2.0正式发布!
  • 网关的主要作用
  • 【从零开始入门unity游戏开发之——unity篇05】unity6基础入门——运行游戏按钮、Game游戏窗口和Project项目窗口介绍
  • 一个hive插入数据失败的问题
  • MySQL 05 章——排序与分页
  • 自行下载foremos命令
  • react相关报错--持续更新中
  • Android studio 将项目打包apk
  • 新年算法题:矩阵对称性检测
  • Linux 内核学习(3) --- 内核中断机制
  • 单片机-- 51-keil使用查看空间占用
  • C++ 设计模式:状态模式(State Pattern)
  • FristiLeaks_1.3靶场渗透
  • [羊城杯 2024]1z_misc
  • [创业之路-230]:《华为闭环战略管理》-5-华为的组织架构与业务架构是不同的,组织架构是为业务架构服务
  • Docker网络与数据卷持久化
  • 三、AI知识(自然语言处理)
  • 记录uniapp组件swiper自适应高度
  • 期权懂|个股期权的流动性如何?
  • 生成埃里克卡特曼人工智能语音听起来像他或配音视频
  • PyTorch transpose、permute、view和einops.rearrange
  • LeetCode 热题 100_二叉树的直径(40_543_简单_C++)(二叉树;递归)
  • pip安装paddle失败
  • 【AIGC篇】“智” 造元宇宙新境:AIGC 于虚拟现实的奇幻征途
  • 亚马逊国际站商品爬虫:Python实战指南
  • 【操作系统进程与线程管理:从PCB到多线程并发编程】