首页 > 数据库 >redis底层数据结构之整数集合(intset)

redis底层数据结构之整数集合(intset)

时间:2022-12-17 18:12:25浏览次数:47  
标签:intset 元素 redis 整数 int16 集合 新元素 数据结构

整数集合(intset)

当一个集合只包含整数值元素,并且这个集合的元素数量不多时,redis会使用整数集合(intset)作为集合键的底层实现

整数集合用于保存整数值的集合抽象数据类型,它可以保存类型为int16_t、int32_t 或者int64_t 的整数值,并且保证集合中不会出现重复元素

它是一个有序不重复的连续空间

 

1 intset结构

typedef struct intset {
    uint32_t encoding;
    uint32_t length;
    int8_t contents[];
} intset;

其中:

encoding:编码类型,包含:int16_t,int32_t,int64_t

length:存放的元素数量

contents:存放元素的数组,从小到大排序

 

 

2 intset示意图

encoding=int16_t, 存有6个元素的intset示意图如下:

 

 

 

3 升级

编码由小到大:int16_t ----> int32_t ----> int64_t

当新增的元素类型比原集合元素类型的长度要大时,需要对整数集合进行升级,才能将新元素放入整数集合中,具体步骤:
1) 根据新元素类型,扩展整数集合底层数组的大小,并为新元素分配空间
2) 将底层数组现有的所有元素都转成与新元素相同类型的元素,并将转换后的元素放到正确的位置,放置过程中,维持整个元素顺序都是有序的
3) 将新元素添加到整数集合中,保证有序

 

 

4 降级

整数集合不支持降级操作,一旦对数组进行了升级,编码就会一直保持升级后的状态

 

标签:intset,元素,redis,整数,int16,集合,新元素,数据结构
From: https://www.cnblogs.com/junffzhou/p/16972096.html

相关文章

  • redis之五种基本数据类型
    五种基本数据类型redis存储任何类型的数据都是以key-value形式保存,并且所有的key都是字符串,所以讨论基础数据结构都是基于value的数据类型常见的5种数据类型是:String、Li......
  • redis底层数据结构之简单动态字符串(SDS)
    简单动态字符串(simpledynamicstring,SDS)redis使用C语言编写的,但是redis的字符串却不是C语言中的字符串(以空字符'\0'结尾的字符数组),redis定义了一种简单动态字符串(s......
  • redis底层数据结构之双向链表(linkedlist)
    双向链表(linkedlist)redis的双向链表(linkedlist)是基于链表的一种数据结构链表是一种常见的基础数据结构,是一种非顺序存储数据的线性表,在每一个节点里存储了下一个节点......
  • redis底层数据结构之压缩列表(ziplist)
    压缩列表(ziplist)压缩列表(ziplist)是redis为了节约内存而开发的,由连续内存块组成的顺序型数据结构,适用于长度较小的值存取的效率高,内存占用小,但由于内存是连续的,在修......
  • redis底层数据结构之快速列表(quicklist)
    快速列表(quicklist)redis3.2版本之前,List类型数据使用的底层数据结构是压缩列表(ziplist)或双向链表(linkedlist),当列表元素个数比较少并且每个元素占用空间比较小时使......
  • redis常用命令之string&list
    redis常用操做stringkey操作string<key:value>setnamejohngetnamelistsetnx<keyvalue>setnxgendermale(分布式锁)getgendersetnxgoods_1111delgoods_1ge......
  • 数据结构和算法day1(Java)
    1.什么是数据结构?数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据。1.2.数据结构的分类:逻辑结构和物理结构逻辑结构:集合结构(无关系)、线性结......
  • redis分布式锁
    redis分布式锁C#集合线程问题:https://www.cnblogs.com/Clingingboy/archive/2010/12/06/1897534.htmlC#多线程安全集合类:https://www.cnblogs.com/Darius0821/p/16967......
  • windows下安装和配置Redis
    一、下载windows版本的Redis    Redis官方提供的是Linux安装版的,并没有Windows版本的Redis,为了学习Redis总不能去跑个虚拟机来运行吧,所以在GitHub中有人发布了Windows......
  • C/C++数据结构课程设计[长春理工大学计算机科学技术学院2022秋季学期]
    C/C++数据结构课程设计[长春理工大学计算机科学技术学院2022秋季学期]长春理工大学计算机科学技术学院2022秋季学期数据结构课程设计一、目的:巩固数据结构与算法课内......