redis3.0.7源码阅读(六)redis整数集合


版本:3.0.7


1.源文件
intset.h
intset.c

2.整数集合数据结构
typedef struct intset {
    // 编码方式
    uint32_t encoding;

    // 集合包含的元素数量
    uint32_t length;

    // 保存元素的数组
    int8_t contents[];
} intset;

/*
 * intset 的编码方式
 */
/* Note that these encodings are ordered, so:
 * INTSET_ENC_INT16 < INTSET_ENC_INT32 < INTSET_ENC_INT64. */
#define INTSET_ENC_INT16 (sizeof(int16_t))
#define INTSET_ENC_INT32 (sizeof(int32_t))
#define INTSET_ENC_INT64 (sizeof(int64_t))

3.空间分布
redis3.0.7源码阅读(六)redis整数集合_第1张图片

4.一些特性
4.1 当使用redis集合键,且数值都是整数时,那么集合键的底层实现就是整数集合
4.2 整数集合支持三种数据编码,分别是16位、32位、64位数值
4.3 整数集合会自动发生升级,也就是当前编码不足以装下新插入的数据时,就会把整个集合升级,但是不会发生降级
4.4 整数集合比字符串集合在某种情况下更加节省内存,比如说数值比较大的情况下

原文出自: http://blog.csdn.net/daiyudong2020/article/details/54236620

End;

你可能感兴趣的:(redis3.0.7源码阅读(六)redis整数集合)