Redis数据结构 — QuickList

news2025/3/9 10:23:51

目录

quicklist 结构设计

总结


quicklist 结构设计

quicklistNode 结构体里包含了前一个节点和下一个节点指针,这样每个 quicklistNode 形成了一个双向链表。但是链表节点的元素不再是单纯保存元素值,而是保存了一个压缩列表,所以 quicklistNode 结构体里有个指向压缩列表的指针 *zl。

在向 quicklist 添加一个元素的时候,不会像普通的链表那样,直接新建一个链表节点。而是会检查插入位置的压缩列表是否能容纳该元素,如果能容纳就直接保存到 quicklistNode 结构里的压缩列表,如果不能容纳,才会新建一个新的 quicklistNode 结构。

quicklist 会控制 quicklistNode 结构里的压缩列表的大小或者元素个数,Redis提供了一个配置项:list-max-ziplist-size来限制,来规避潜在的连锁更新的风险,但是这并没有完全解决连锁更新的问题。

如果值为正,则代表ZipList的允许的entry个数的最大值
如果值为负,则代表ZipList的最大内存大小,分5种情况,默认值为-2:

  • -1:每个ZipList的内存占用不能超过4kb

  • -2:每个ZipList的内存占用不能超过8kb

  • -3:每个ZipList的内存占用不能超过16kb

  • -4:每个ZipList的内存占用不能超过32kb

  • -5:每个ZipList的内存占用不能超过64kb

总结

QuickList的特点:

  • 是一个节点为ZipList的双端链表

  • 节点采用ZipList,解决了传统链表的内存占用问题

  • 控制了ZipList大小,解决连续内存空间申请效率问题

  • 中间节点可以压缩,进一步节省了内存

缺点:内存增加,每扩展一次节点,都要记录其头信息。

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

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

相关文章

JSP基础

javaWeb项目目录 src:存放Java源文件 src/main/java/com:存放相应的Java代码,并根据对应的Java项目继续分层架构,主要有以下几个软件包。 bean包:封装类,一般是按照数据库的来写内容的,一个表…

Sentry 监控部署与使用(详细流程)

一、简介 Sentry 是一个开源的实时错误监控的项目,它支持很多端的配置,包括 web 前端、服务器端、移动端、游戏端。 基于 Django 构建的现代化的实时事件日志监控、记录和聚合平台,主要用于如何快速的发现故障。更快地解决错误和性能问题&…

vue——自定义指令,实现拖拽改变元素的宽度——技能提升

最近在看企业微信时,发现tapd的需求部分,分为左右两部分,左侧可以实现拖拽改变宽度。 感觉这样的实现效果比较好,再联想到之前写绩效结构时,也是同样的左右布局。 如果能实现同样的效果,则算是很好一种体…

【方法】公众号上传的视频不能横屏播放,如何解决?

目录 说明 解决步骤 步骤一:开启微信横屏模式 步骤二:打开手机自动旋转功能 说明 直接用手机打开公众号文章上内嵌的视频,发现只能横屏播放,无法全屏查看。 这个时候学习,尤其是看视频课程的时候无法看清楚全图。…

华为发布大模型时代AI存储新品

7月14日,华为发布大模型时代AI存储新品,为基础模型训练、行业模型训练,细分场景模型训练推理提供存储最优解,释放AI新动能。 企业在开发及实施大模型应用过程中,面临四大挑战: 首先,数据准备时…

数据结构:第五章 树

文章目录 一、树的基本概念1.1树的定义1.2树的基本用语1.2.1结点之间的关系描述1.2.2结点、树的属性描述1.2.3有序树、无序树1.2.4森林1.2.5小结 1.3树的性质 二、二叉树的概念2.1二叉树的定义和基本术语2.2二叉树的性质2.2.1二叉树常考性质2.2.2完全二叉树常考性质 2.3二叉树的…

使用chatgpt过funcaptcha验证码3个人学习记录

funcaptcha 验证码3 通过记录 往期验证码:http://t.csdn.cn/ulgXY funcaptcha1 往期验证码:http://t.csdn.cn/3xMnZ funcaptcha2 funcaptcha 那个公司开发的简要介绍: Funcaptcha是由hCaptcha公司开发的一种人机验证系统。hCaptcha是一家位…

快速排序的非递归实现、归并排序的递归和非递归实现、基数排序、排序算法的时间复杂度

文章目录 快速排序的非递归三数取中法选取key快速排序三路划分 归并排序的递归归并排序的非递归计数排序稳定性排序算法的时间复杂度 快速排序的非递归 我们使用一个栈来模拟函数的递归过程,这里就是在利用栈分区间。把一个区间分为 [left,keyi-1][key][keyi1,right…

机器学习(13)--支持向量机

目录 一、支持向量机概述 二、Sklearn中的SVM概述 三、线性SVM损失函数 四、sklearn中进行可视化 1、导入模块 2、实例化数据集,可视化 3、网格点制作 4、建立模型并绘制决策边界和超平面 5、常用接口 6、如果数据是环形呢? 五、核函数 1、…

emacs下相对行号的设置

全局设置 全局开启行号显示:global-display-line-numbers-mode t 并设置 display-line-numbers-type的样式: relative 相对 配置代码如下: (use-package emacs:ensure t:config (setq display-line-numbers-type relative) (global-display-line-numbers-mode t)…

校园跑腿小程序如何运营赚钱,方法其实很简单

校园跑腿小程序是一种以满足大学生的校园内外需求为主要目标的创业方式。下面将详细介绍校园跑腿小程序的运营方式,包括市场调研、产品设计、用户获取与留存、服务流程管理等方面。 市场调研: 在开始校园跑腿小程序的运营之前,进行充分的市…

2023年经典【自动化面试题】附答案

一、请描述一下自动化测试流程? 自动化测试流程一般可以分为以下七步: 编写自动化测试计划; 设计自动化测试用例; 编写自动化测试框架和脚本; 调试并维护脚本; 无人值守测试; 后期脚本维…

【C++从0到王者】第九站:String基本介绍及使用

文章目录 一、String的基本使用二、String构造相关的成员函数1.String构造函数2.String析构函数3.operator运算符重载4.String增删查改之增5. operator[]运算符重载 三、String迭代器1.迭代器介绍2.string中迭代器的作用3.迭代器跟容器结合4.反向迭代器5.const修饰的迭代器 四、…

华夏ERP在虚拟机Ubuntu上的安装(测试实例)

1.虚拟机软件VirtualBOX 7.0 2.Ubuntu 版本 3.宝塔面板安装 百度搜索宝塔面板,按官网提示进行安装。下面截图是官网示例。 if [ -f /usr/bin/curl ];then curl -sSO download.cnnbt.net/install_panel.sh;else wget -O install_panel.sh download.cnnbt.net/install…

python接口自动化(三十七)-封装与调用--读取excel 数据(详解)

简介 在进行软件接口测试或设计自动化测试框架时,一个不比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xlrd、xlwt开源包来读写excel。例如:当我们登录的账号有多个的…

报错400是什么怎么解决呢?

首先要了解400错误是什么错误: HTTP状态码400表示"错误请求"。它是一种客户端错误状态码,表示服务器无法理解请求的语法或参数。当服务器收到一个无效的请求时,通常会返回400错误码。这可能是由于请求中缺少必要的参数、参数格式错…

亚马逊买家号怎么留评

要在亚马逊上留下产品评价,需要买家号有留评权限才行。以下是留评论的步骤: 1、登录亚马逊账号:使用您的买家账号和密码登录到亚马逊的网站或移动应用程序。 2、找到购买的产品:在亚马逊的网站或应用程序中,找到您购…

el-ment ui 表格组件table实现列的动态插入功能

在实际需求中我们经常遇到各种奇葩的需求,不足为奇。每个项目的需求各不相同,实现功能的思路大致是一样的。 本文来具体介绍怎么实现table表格动态插入几列。 首先实现思路有2种, 1. 插入的位置如果是已知的,我知道在哪个标题的…

WEB学习笔记3

输入输出语句 外部js:这种写法有一个不好的地方就是,两个不同的开发人员在使用不同的js写function的时候有可能造成重复,导致程序紊乱。在这推荐一种用json格式方式书写js函数的方法 变量: 变量命名规范: let和var的区…

DolphinScheduler使用问题记录

1.资源中心 功能板块 出现 storage not startup #问题原因 提示:“storage not startup”,顾名思义:未启用存储 #解决方式 1. 修改两个 common.properties 文件: api-server/conf/common.properties worker-server/conf/common.p…