Redis底层数据结构-IntSet

news/2024/7/5 2:59:20

IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并具备长度可变,有序等特征。

结构如下图所示:
![[Pasted image 20240402150318.png]]

int8_t contents[]的元素只有一个字节,能表示的整数范围只有-128~127,是不是有点小呀?
其实数组本身只是一个指针,指向起始元素的地址,intset并不依赖于C语言提供的数组相关函数,所有增删改查都是自己来做的
由此,对这个数组的操作和大小并不是像表面看到的一样,而是由encoding来决定 的
![[Pasted image 20240402151509.png]]

为了方便查找,Redis会将intset中所有的整数按照升序依次保存在contents数组中,结构如下图:
![[Pasted image 20240402152104.png]]

如果在该案例中插入一个大于int16最大值的数据50000后,应该会发生什么?

  1. 会升级编码为符合条件的最小编码,在本例子中升级编码为INTSET_ENC_INT32,每个整数占4字节,并按照新的编码方式以及元素个数扩容数组.

  2. 倒序依次(先调整20,10,5)将数组中的元素拷贝到扩容后的正确位置。
    ![[Pasted image 20240402153500.png]]

  3. 调整之后的位置:
    ![[Pasted image 20240402153548.png]]、

  4. 将待添加的元素放入数组末尾
    ![[Pasted image 20240402153612.png]]

  5. 最后,将intset的encoding属性改为INTSET_ENC_INT32,将length修改为4
    ![[Pasted image 20240402153724.png]]

IntSet可以看作是特殊的整数数组,具备一些特点:

  1. Redis会确保IntSet中的元素唯一有序
  2. 具备类型升级机制,可以节省内存空间
  3. 底层采用二分查找来查询
    ![[Pasted image 20240402154432.png]]

![[Pasted image 20240402154443.png]]


http://lihuaxi.xjx100.cn/news/2144108.html

相关文章

Linux:ip和ip协议的初步认识

文章目录 ip协议基本认识ip协议的报头网段划分ip的类型划分 ip协议基本认识 前面对于TCP的内容已经基本结束了,那么这也就意味着在传输层也已经结束了,那么下一步要进入的是的是网络层,网络层中也有很多种协议,这里主要进行解析的…

扩展频率3225有源晶振SG-9101CE

SG-9101CE是一款小尺寸3225有源晶振。随着市场小型化、多功能、高信赖度的电子产品需求量大增,产品开发周期时间要求越来越短,传统的石英晶振性能优异,但设计制造周期相对较长,如果有工程师便的因为项目急需特殊频点,特…

部署k8s客户端,及docker私仓部署

1.部署一个docker私仓 mkdir /opt/docker/registry #配置仓库密码 mkdir /opt/docker/auth cd /opt/docker/auth htpasswd -Bbn admin admin > htpasswd#运行docker私仓服务,下面端口5000:5000 前面的5000对应本机端口可以自定义 docker run -itd \ -v /opt/d…

Python网络爬虫(三):Selenium--以携程酒店为例

1 Selenium简介 Selenium是一个用于网站应用程序自动化的工具,它可以直接运行在浏览器中,就像真正的用户在操作一样。它相当于一个机器人,可以模拟人类在浏览器上的一些行为,比如输入文本、点击、回车等。Selenium支持多种浏览器&…

Apache Pulsar源码解析之Lookup机制

引言 在学习Pulsar一段时间后,相信大家也或多或少听说Lookup这个词,今天就一起来深入剖析下Pulsar是怎么设计的它吧 Lookup是什么 在客户端跟服务端建立TCP连接前有些信息需要提前获取,这个获取方式就是Lookup机制。所获取的信息有以下几种…

网络层IP协议和数据链路层--理解NAT/NAPT路由技术

文章目录 一.网络层与数据链路层二.IP协议报头报文切片IP协议与路由器IP地址的结构与子网掩码数据报文路由的实现机制 三.公网IP和私网IP公网IP主机与公网IP主机之间的跨网络通信 四.数据链路层与局域网通信数据链路层以太网协议 五.NAT技术实现私网IP主机与公网IP主机之间的跨…

Vue.js---------Vue基础

能够说出Vue的概念和作用能够使用vue/cli脚手架工程化开发能够熟练Vue指令 一.vue基本概念 1.学习vue Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 渐进…

Apache ECharts-数据统计(详解、入门案例)

简介:Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 1、介绍 图 1.1 Apache ECharts 功能、运行环境 功能: ECharts&#xff…