redis 系列8 数据结构之整数集合】的更多相关文章

一.概述 整数集合(intset)是集合键的底层实现之一, 当一个集合只包含整数值元素,并且这个集合元素数量不多时, Redis就会使用整数集合作为集合键的底层实现.下面创建一个只包含5个元素的集合键,并且集合中所有元素都是整数值,那么这个集合键的底层实现就会是整数集合. 接着添加非整数值,集合键的底层实现就会是hashtable. > sadd numbers (integer) > object encoding numbers "intset" > sadd n…
当一个集合中只包含整数,并且元素的个数不是很多的话,redis 会用整数集合作为底层存储,它的一个优点就是可以节省很多内存,虽然字典结构的效率很高,但是它的实现结构相对复杂并且会分配较多的内存空间. 而我们的整数集合(intset)可以做到使用较少的内存空间却达到和字典一样效率的实现,但也是前提的,集合中只能包含整型数据并且数量不能太多.整数集合最多能存多少个元素在 redis 中也是有体现的. OBJ_SET_MAX_INTSET_ENTRIES 512 也就是超过 512 个元素,或者向集合…
整数集合是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_t .int32_t或者int64_t的整数值,并且保证集合中不会出现重复元素. 一.整数集合数据结构定义 参数说明:contents:contents数组是整数集合的底层实现,整数集合的每个元素都是contents数组的一个数组项,各个项在数组中按值的大小从小到大有序地排列,并且数组中不包含任何重复项.length:记录了整数集合包含的元素数量,也即是contents数组的长度.encoding:决定了conte…
当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis会使用整数集合(intset)来存储集合元素. intset是紧凑的数组结构,同时支持16位.32位和64位整数. 结构 struct intset<T> { int32 encoding; // 编码方式 int32 length; // 集合包含的元素数量 int<T> contents[]; // 保存元素的整数数组 } intset; contents数组是整数集合的底层实现,各个项在数组中按值大小升序排列…
文章参考:<Redis 设计与实现>黄建宏 整数集合 整数集合时集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合数量不多时,就会使用整数集合 typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[]; } intset; Contents 数组是整数集合的底层实现:每个项在数组中从小到大有序的排列,并且不包含重复项 le…
[TOC] 整数集合是 Redis 集合键的底层实现之一.当一个集合只包含整数值元素,并且元素数量不多时,Redis 就会使用整数集合作为集合键的底层实现. 1 整数集合的实现 整数集合是 Redis 用于保存整数值的集合抽象数据结构.它可以保存类型为 int16_t.int32_t.int64_t 的整数值,并且保证集合中不会出现重复元素. 每个 intset.h/intset 结构表示一个整数集合: typedef struct intset { uint32_t encoding; uin…
一.概述 跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的.在大部分情况下,跳跃表的效率可以和平衡树(关系型数据库的索引就是平衡树结构)相媲美,并且因为跳跃表的实现比平衡树要来得更为简单,所以有不少程序使用跳跃表来代替平衡树. Redis使用跳跃表作为"有序集合键"的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员是比较长的字符串时,Redis就会使用跳跃表来作为有序集合键的底层实现.…
redis里面的整数集合保存的都是整数,有int_16.int_32和int_64这3种类型,和C++中的set容器差不多. 同时具备如下特点: 1.set里面的数不重复,均为唯一. 2.set里面的数是从小到大有序的,这在后面的intsetAdd函数中可以看到. 然后由于我们可以同时存储int_16.int_32和int_64这3种类型,一开始只能为一种类型.假设为int_32,那么我们要插入一个int_16类型的数,只需要找到位置直接插入就可以了:但是我们要插入一个int_64类型的数,我们…
前言 redis作为我们开发的一大神器,我们接触肯定不会少,但是很多同学也许只会存储String类型的值,这是非常不合理的.在这里,将带大家认识Redis的5中数据结构. 1.问:Redis有那些数据结构? 常见的5种:字符串(String),散列(Hash), 列表(List),集合(Set),有序集合(SortedSet)等:除此之外,还有HyperLogLog.Geo.Pub/Sub. 注:之前项目组也有遇见过 BloomFilter(布隆过滤器),这个能很好地防止缓存穿透的发生,它的原理…
一. 概述 字典又称符号表(symbol table),关联数组(associative array), 映射(map),是一种用于保存键值对(key-value pair)的抽象数据结构.在字典中,一个key和一个value进行关联称为键值对.在字典中每个键都是唯一的,程序可以在字典中根据键查找关联的值,或通过键更新删除值等操作.在C语言中并没有内置这种数据结构,因此Redis构建了自己的字典实现.在Redis中应用广泛, 对数据库的增,删,查,改 都是构建在对字典的操作之上的. -- 例1…