美文网首页
Redis源码分析(四)——Redis数据结构-整数集合

Redis源码分析(四)——Redis数据结构-整数集合

作者: 大闲人柴毛毛 | 来源:发表于2017-10-14 18:49 被阅读33次

1. 整数集合特点

  1. 有序:集合中所有值按照从小到大顺序排列。
  2. 不重复
  3. 可以存储int16_t、int32_t、int64_t三种类型的整数

1. 数据结构

typedef struct intset{
  unit32_t encoding;
  unit32_t length;
  int8_t contents[];
} intset;
  • encoding:content数组中存储的整数类型(int16_t、int32_t、int64_t三者之一)
  • length:contents数组中元素的个数
  • contents:整数数组

2. 升级

整数集合中可以存储int16_t、int32_t、int64_t这三种类型的整数,但在任一时刻,集合中所有元素的类型都是统一的。
如果当前集合存储的元素是int16_t类型,当需要存入一个int32_t类型的整数时,Redis会分配一片新的内存空间,将每个元素的类型提升为int32_t,再将所有元素迁移至新数组中。
这就是升级的过程。

3. 降级

一旦升级了之后,即使最大的那个元素已经删除,集合元素也是不会降级的。

4. 整数集合优点

4.1 灵活

整数集合可以通过自动升级底层数组来适应新元素,所以我们可以随意地将int16_t、int32_t、int64_t类型的整数添加到集合中,而不必担心类型错误。

4.2 节约内存

如果要用一个数组同时能够保存int16_t、int32_t、int64_t这三种类型的整数,那么只能创建一个int64_t类型的数组,而Redis整数集合可以保存三种类型的整数,只有当有需要的时候才进行升级操作,因此节约了内存。

相关文章

  • Redis源码分析(四)——Redis数据结构-整数集合

    1. 整数集合特点 有序:集合中所有值按照从小到大顺序排列。 不重复 可以存储int16_t、int32_t、in...

  • Redis 源码分析(四) :intset

    Redis 源码分析(四) :intset一、什么是intset二、数据结构定义创建集合新增元素查找元素删除元素升...

  • 整数集合

    整数集合 整数集合(intset)是 Redis 用于保存整数值的集合抽象数据结构, 它可以保存类型为 >int1...

  • redis数据结构(四):整数集合 intset

    数据结构 整数集合是redis为了保存整数值的集合而抽象出来的数据结构。intset数据结构 看这意思,也是把数组...

  • 6.整数集合

    整数集合 1. 整数集合的实现 整数集合是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_...

  • redis底层数据组织方式

    底层数据结构 redis底层数据结构有:字典、双端链表、压缩链表、整数集合、跳跃表和字典、整数集合、embstr ...

  • intset.c

    Redis中的intset,表示整数集合,用来存储整数,在set数据结构中用到。 intset的数据结构如下: 1...

  • Redis 整数集合

    整数集合是 Redis 用于保存整数值的有序的集合抽象数据结构,当一个集合只包含整数值元素,并且这个集合的元素数量...

  • Redis 源码分析——定时任务原理

    本文主要是基于 redis 6.2 源码进行分析定时事件的数据结构和常见操作。 数据结构 在 redis 中通过 ...

  • 「Redis源码解读」—数据结构(四)整数集合

    知识点 整数集合是集合键的底层实现之一 整数集合的底层实现为数组,这个数组以有序、无重复的方式保存集合元素,在有需...

网友评论

      本文标题:Redis源码分析(四)——Redis数据结构-整数集合

      本文链接:https://www.haomeiwen.com/subject/tvcfuxtx.html