redis intset

ddatsh

db #redis redis

set 集合全为 int ,且数量不多(< set-max-intset-entries)时,底层用 intset 结构,否则用 dict

随数据的添加而改变它的数据编码(只升不降)

typedef struct intset {
    uint32_t encoding; // 保存元素所使用的类型的长度
    uint32_t length; // 元素个数
    int8_t contents[]; // 柔性数组,这部分内存不包含在 intset 结构当中,元素不重复;元素在数组中由小到大排列;
} intset;

#define INTSET_ENC_INT16 (sizeof(int16_t))
#define INTSET_ENC_INT32 (sizeof(int32_t))
#define INTSET_ENC_INT64 (sizeof(int64_t))

intset 与 ziplist相比: