redis intset

ddatsh

db #redis redis

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

随数据的添加而改变它的数据编码

1
2
3
4
5
6
7
8
9
typedef struct intset {
    uint32_t encoding;
    uint32_t length;
    int8_t contents[];
} intset;

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

encoding: intset 中每个元素用几个字节来存储

length: intset 中的元素个数

contents: 柔性数组,这部分内存不包含在 intset 结构当中

intset 与 ziplist相比: