Redis数据结构之整数集合-intset】的更多相关文章

当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis会使用整数集合(intset)来存储集合元素. intset是紧凑的数组结构,同时支持16位.32位和64位整数. 结构 struct intset<T> { int32 encoding; // 编码方式 int32 length; // 集合包含的元素数量 int<T> contents[]; // 保存元素的整数数组 } intset; contents数组是整数集合的底层实现,各个项在数组中按值大小升序排列…
整数集合是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_t .int32_t或者int64_t的整数值,并且保证集合中不会出现重复元素. 一.整数集合数据结构定义 参数说明:contents:contents数组是整数集合的底层实现,整数集合的每个元素都是contents数组的一个数组项,各个项在数组中按值的大小从小到大有序地排列,并且数组中不包含任何重复项.length:记录了整数集合包含的元素数量,也即是contents数组的长度.encoding:决定了conte…
一.概述 整数集合(intset)是集合键的底层实现之一, 当一个集合只包含整数值元素,并且这个集合元素数量不多时, Redis就会使用整数集合作为集合键的底层实现.下面创建一个只包含5个元素的集合键,并且集合中所有元素都是整数值,那么这个集合键的底层实现就会是整数集合. 接着添加非整数值,集合键的底层实现就会是hashtable. > sadd numbers (integer) > object encoding numbers "intset" > sadd n…
当一个集合中只包含整数,并且元素的个数不是很多的话,redis 会用整数集合作为底层存储,它的一个优点就是可以节省很多内存,虽然字典结构的效率很高,但是它的实现结构相对复杂并且会分配较多的内存空间. 而我们的整数集合(intset)可以做到使用较少的内存空间却达到和字典一样效率的实现,但也是前提的,集合中只能包含整型数据并且数量不能太多.整数集合最多能存多少个元素在 redis 中也是有体现的. OBJ_SET_MAX_INTSET_ENTRIES 512 也就是超过 512 个元素,或者向集合…
redis中整数集合intset相关的文件为:intset.h与intset.c intset的所有操作与操作一个排序整形数组 int a[N]类似,只是根据类型做了内存上的优化. 一.数据结构 typedef struct intset { uint32_t encoding; uint32_t length; int8_t contents[]; } intset; intset的数据结构比较简单,使用了一个变长结构体,成员length记录当前成员数量,成员encoding记录当前的int类…
整数集合简介 整数集合(intset)是Redis集合数据类型的内部编码之一,当集合数据类型中的元素都是整数并且元素数量较少的时候,Redis就使用整数集合作为内部编码. 整数集合(intset)中可以保存int16_t.int32_t和int64_t类型的整数,而且保证整数集合中元素不会重复. 整数集合的结构 整数集合(intset)的结构中包含三个属性:编码方式(encoding).元素数量(length)和元素数组(contents). 编码方式(encoding)表示当前整数集合的编码方…
整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时Redis就会使用整数集合作为集合键的底层实现 整数集合是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int_16,int_32,int_64的整数值并且保证集合中不会出现重复元素 contents 数组是整数集合的底层实现:整数集合的每个元素都是contents数组的一个数组项,各个项在数组中按值的大小从小到大有序地排列,并且数组中不包括任何重复项 length 属性记录了整数集合包含的元素…
intset介绍 intset 整数集合,当一个集合只有整数元素,且元素数量不多时,Redis 就会用整数集合作为集合键的底层实现. redis> SADD numbers 1 3 5 7 9 (integer 5) redis> OBJECT ENCODING numbers (inset) 为什么要用 intset? 集合键的另外一种实现是值为空的散列表(hash table),当元素比较少时,用hash table 存就比较浪费内存,而用 intset 就比较节约内存. 整数集合实现 i…
redis源码分析系列文章 [Redis源码系列]在Liunx安装和常见API 为什么要从Redis源码分析 String底层实现——动态字符串SDS 双向链表都不懂,还说懂Redis? 面试官:说说Redis的Hash底层 我:......(来自阅文的面试题) Redis的跳跃表确定不了解下 前言 大噶好,今天仍然是元气满满的一天,抛开永远写不完的需求,拒绝要求贼变态的客户,单纯的学习技术,感受技术的魅力.(哈哈哈,皮一下很开森) 前面几周我们一起看了Redis底层数据结构,如动态字符串SDS…
文章参考:<Redis 设计与实现>黄建宏 整数集合 整数集合时集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合数量不多时,就会使用整数集合 typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[]; } intset; Contents 数组是整数集合的底层实现:每个项在数组中从小到大有序的排列,并且不包含重复项 le…