Redis学习笔记:整数集合

ops/2024/10/24 0:24:49/

概述

整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。它可以保存类型为int16_t、int32_t或者int64_t的整数值,并且保证集合中不会出现重复元素。

实现

整数集合使用intset.h/intset结构表示:

typedef struct intset{//编码方式uint32_t encoding;//集合包含的元素数量uint32_t length;//保存元素的数组int8_t contents[];
}intset;

如图展示的是一个保存16位整数的整数集合,encoding表示整数集合内元素的编码方式,会根据插入的元素自动调整,length保存着集合内元素的数量,contents数组是数据实际保存的位置。

升级

        每当我们要将一个新元素添加到整数集合里面,并且新元素不在整数集合编码方式的表示范围内时,整数集合需要先进行升级。例如整数集合当前是16位整型编码,可表示的范围为:-32768~32767,当新加入的元素不在此范围,比如32768需要32位整型才能表示,或者更大的数,需要64位整型,就需要对整数集合进行升级才能保存。升级会重新为contents数组分配空间,并将数组内的所有元素都升级为新的类型。整数集合不支持降级操作,一旦对数组进行了升级,编码就会一直保持升级后的状态。

降级操作每次删除元素都需要判断所有元素是否可以降级,可能会影响性能,所以不支持?个人瞎猜的。

升级的好处

        整数集合的升级策略有两个好处,一个是提升整数集合的灵活性,通过自动升级底层数组来适应新元素,可以随意地将int16_t、int32_t或者int64_t类型的整数添加到集合中,而不必担心出现类型错误,这种做法非常灵活。另一个是尽可能地节约内存。Redis作为内存数据库,内存空间也是十分宝贵的资源,整数集合优先使用小的类型来保存数据,升级操作只会在有需要的时候进行,这可以尽量节省内存。

参考

《Redis设计与实现》


http://www.ppmy.cn/ops/127954.html

相关文章

MeshXL: Neural Coordinate Field forGenerative 3D Foundation Models 论文解读

目录 一、概述 二、相关工作 1、3D表示 2、3D生成 3、三维基础模型 三、NeurCF 四、MeshXL 1、流程 2、损失 五、数据集 六、实验 1、模型参数量 2、 不同模型对比 3、Mesh生成的多样性 4、文本或图像到网格的生成 5、纹理生成 一、概述 该论文介绍了一个生成式…

基于SSM+微信小程序的房屋租赁管理系统(房屋2)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的房屋租赁管理系统实现了有管理员、中介和用户。 1、管理员功能有,个人中心,用户管理,中介管理,房屋信息管理&#xff…

JAVA中线程安全问题

1.线程安全的概念 线程安全是指在多线程环境下,程序能够正确地执行而不会出现数据不一致、资源竞争等问题。 简单来说,如果一个程序在运行时的结果符合我们的预期,那么这个程序就是线程安全的,反之,如果程序运行的结果…

轻松修改Linux虚拟机的IP(含Mac版VMware虚拟机克隆教程)

问题背景 在使用WMware克隆虚拟机时,克隆出来的新虚拟机与源虚拟机的IP和MAC地址均相同,无法正常使用,因此需要手动去修改克隆出来的新虚拟机的IP和MAC地址。这篇文章将介绍如何克隆虚拟机并手动修改IP和MAC地址。(点击导航栏可快…

CollageController

目录 1、 CollageController 1.1、 ReceptionID查询CollageID 退料模态框 1.2、 查询退料明细信息 1.3、 查询退料主信息 CollageController using QXQPS.Models; using QXQPS.Vo; using System; using System.Collections; using System.Collections.Generic; …

C++入门基础知识123—【关于C++ 指针数组】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C 指针数组的相关内容! 关于…

使用 cmake 在 x86 系统中为 arm 系统交叉编译程序

原理: 在 x86 系统里使用交叉编译工具链(arm 版 gcc/g)编译程序,然后放在 arm 系统里运行。 arm 版本 使用 lscpu 查看 cpu 架构 版本说明armv732 bitarmv8/arrch6464 bit 安装交叉编译工具链 # 针对 armv7 sudo apt install…

如何使用OpenSSL创建RSA证书文件?

正文共:1024 字 7 图,预估阅读时间:1 分钟 我们前面介绍了如何通过Windows Server生成证书(Windows Server配置生成认证证书),也介绍了如何通过easy-RSA生成证书文件(使用Easy-RSA配置生成SSL证…