redis 底层数据结构 整数集合intset
2018-01-05 10:58
721 查看
整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时Redis就会使用整数集合作为集合键的底层实现
整数集合是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int_16,int_32,int_64的整数值并且保证集合中不会出现重复元素
contents 数组是整数集合的底层实现:整数集合的每个元素都是contents数组的一个数组项,各个项在数组中按值的大小从小到大有序地排列,并且数组中不包括任何重复项
length 属性记录了整数集合包含的元素数量,即contents的长度
contents数组的真正类型取决于encoding属性的值
当向一个底层为int16数组的整数集合添加一个int64类型的整数值时,整数集合已有的所有元素都会转换成int64类型,所以contents数组保存的四个整数值都是int64类型的
升级
每当我们将一个新元素添加到整数集合里面,并且新元素的类型比整数集合现有所有元素的类型都要长时,整数集合需要先进行升级,然后才能将新元素添加到整数集合里面
升级整数集合需要三步
1:根据新元素的类型,扩展整数集合底层数组的空间大小,并为新元素分配空间
2:将底层数组现有的所有元素都转换成于新元素相同的类型,并将类型转换后的元素放置到正确的位上,而且在放置元素的过程中需要继续维持底层数组的有序性质不变
3:将元素添加到底层数组里面
因为每次向整数集合添加新元素都可能会引起升级,而每次升级都需要对底层数组中已有的所有元素进行类型转换,
所以向整数集合添加新元素的时间复杂度为O(n)
升级操作为整数集合带来了操作上的灵活性,并且尽可能地节约了内存
整数集合只支持升级操作,不支持降级操作。
从整数集合中移除给定元素O(n)
返回整数集合包含的元素个数O(1)
整数集合是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int_16,int_32,int_64的整数值并且保证集合中不会出现重复元素
contents 数组是整数集合的底层实现:整数集合的每个元素都是contents数组的一个数组项,各个项在数组中按值的大小从小到大有序地排列,并且数组中不包括任何重复项
length 属性记录了整数集合包含的元素数量,即contents的长度
contents数组的真正类型取决于encoding属性的值
当向一个底层为int16数组的整数集合添加一个int64类型的整数值时,整数集合已有的所有元素都会转换成int64类型,所以contents数组保存的四个整数值都是int64类型的
升级
每当我们将一个新元素添加到整数集合里面,并且新元素的类型比整数集合现有所有元素的类型都要长时,整数集合需要先进行升级,然后才能将新元素添加到整数集合里面
升级整数集合需要三步
1:根据新元素的类型,扩展整数集合底层数组的空间大小,并为新元素分配空间
2:将底层数组现有的所有元素都转换成于新元素相同的类型,并将类型转换后的元素放置到正确的位上,而且在放置元素的过程中需要继续维持底层数组的有序性质不变
3:将元素添加到底层数组里面
因为每次向整数集合添加新元素都可能会引起升级,而每次升级都需要对底层数组中已有的所有元素进行类型转换,
所以向整数集合添加新元素的时间复杂度为O(n)
升级操作为整数集合带来了操作上的灵活性,并且尽可能地节约了内存
整数集合只支持升级操作,不支持降级操作。
从整数集合中移除给定元素O(n)
返回整数集合包含的元素个数O(1)
相关文章推荐
- 【Redis源码剖析】 - Reids内置数据结构之整数集合intset
- Redis内部数据结构详解之整数集合(intset)
- 【Redis源码剖析】 - Reids内置数据结构之整数集合intset
- Redis-数据结构-整数集合-intset
- redis数据结构之整数集合
- redis 数据结构 整数集合和压缩列表
- 结合redis设计与实现的redis源码学习-6-intset(整数集合)
- Redis源码分析(六)——整数集合(Intset)
- Redis源码分析(四)——Redis数据结构-整数集合
- 底层实现-intset 整数集合
- Redis源码剖析和注释(五)--- 整数集合(intset)
- redis学习笔记(5)---整数集合intset
- Redis 整数集合
- redis 底层数据结构 压缩列表 ziplist
- Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数
- redis 笔记01 简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表
- redis 系列9 对象类型(字符串,哈希,列表,集合,有序集合)与数据结构关系
- 【Redis笔记(六)】 Redis数据结构 - 有序集合zset
- 深入源码看数据结构--集合和Map底层实现
- Redis底层数据结构之链表