美文网首页
WJyzBENkpB

WJyzBENkpB

作者: Fightover | 来源:发表于2022-05-10 17:19 被阅读0次

    在 Redis 中,有一种数据类型,当在存储的时候会同时采用两种数据结构来进行分别存储,那么 Redis 为什么要这么做呢?这么做会造成同一份数据占用两倍空间吗?

    五种基本类型之集合对象

    Redis 中的集合对象是一个包含字符串类型元素的无序集合,集合中元素唯一不可重复。

    集合对象的底层数据结构有两种:intset 和 hashtable。内部通过编码来进行区分:

    [图片上传失败...(image-1bb1d9-1652174387663)]

    image.gif

    intset 编码

    intset(整数集合)可以保存类型为 int16_t,int32_t,int64_t 的整数值,并且保证集合中没有重复元素。

    intset 数据结构定义如下(源码 inset.h 内):

    typedef struct intset {
        uint32_t encoding;//编码方式
        uint32_t length;//当前集合中的元素数量
        int8_t contents[];//集合中具体的元素
    } intset;
    
    
    image.gif

    下图就是一个 intset 的集合对象存储简图:

    [图片上传失败...(image-ade0a8-1652174387663)]

    image.gif

    相关文章

      网友评论

          本文标题:WJyzBENkpB

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