美文网首页redis系列
redis数据结构(四):整数集合 intset

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

作者: 范柏柏 | 来源:发表于2020-05-29 22:36 被阅读0次

数据结构

整数集合是redis为了保存整数值的集合而抽象出来的数据结构。
intset数据结构

typedef struct intset {
    
    // 编码方式
    uint32_t encoding;
    
    // 集合包含的元素个数
    uint32_t length;
    
    // 保存元素的数组
    int8_t contents[];

看这意思,也是把数组封装了一层,把length拿出来维护,方便返回数组个数。

另外两个属性就是intset的精髓了。

contents[]中的int类型,并不是int8的。而是根据encoding中定义的编码方式动态变化的。这里叫升级。

什么意思呢?

假如,刚开始定义的时候,数组中存的1,2,3。这时候元素的个数是3,编码方式是int16。现在要插入65535(int32类型),之前数组的格就大小就不够用了嘛,那就扩容呗,把之前的每个元素所占的格都扩容成int32。这样整个数组就变大了。

升级的好处是什么

  • 灵活
    通常不会将不同类型的数据放在一个数组里面。这样设计就可以放在一个数组里面了

  • 节约内存
    需要时升级,不需要时就那么大。有点类似压缩列表,但,压缩列表遍历的时候需要通过offset一个一个的遍历,数组因为每个格大小是一样的,所以支持下标快速寻址。

注意:只能扩容,不能缩容。

相关文章

  • intset.c

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

  • 整数集合

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

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

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

  • Redis深度历险-整数集合(intset)

    Redis深度历险-整数集合(intset) Redis中的集合在只有数字的情况下使用的是intset存储,主要代...

  • Redis 源码分析(四) :intset

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

  • Redis3.2源码分析-整数集合intset

    intset是Redis集合的底层实现之一,当存储整数集合并且数据量较小的情况下Redis会使用intset作为s...

  • Redis数据结构——整数集合

    前言 整数集合(intset)并不是一个基础的数据结构,而是Redis自己设计的一种存储结构,是集合键的底层实现之...

  • 快速整明白Redis中的整数集合到底是个啥

    整数集合简介 整数集合(intset)是Redis集合数据类型的内部编码之一,当集合数据类型中的元素都是整数并且元...

  • 6 整数集合

    整数集合(intset)是集合键的底层实现之一,当一个集合值包含整数值元素,并且元素不多,Redis就会使用整数集...

  • Redis数据结构学习-整数集合(五)

    整数集合(intset) 是集合键的底层实现之一、当一个集合只包含整数值元素, 且集合元素数量不多时、Redis就...

网友评论

    本文标题:redis数据结构(四):整数集合 intset

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