redis源码浅析--五-整数集合的实现

环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation

参考书籍:《redis的设计与实现》

相关推荐:字节序

前言

intset是集合数据类型的底层实现之一,当结合中只包含整数元素,并且元素个数不多时,redis就会使用intset做为集合的底层实现。


一.数据结构

typedef struct intset {
    uint32_t encoding; //编码方式 ,决定了contents中元素是int_16 int_32 int_64等
    uint32_t length;   //数组的长度
    int8_t contents[]; //顺序按照从小到大保存集合元素
} intset;

二.接口

intset *intsetNew(void); //创建一个新的整数集合
intset *intsetAdd(intset *is, int64_t value, uint8_t *success);//将新的元素添加到整数结合中
intset *intsetRemove(intset *is, int64_t value, int *success);//移除某个元素
uint8_t intsetFind(intset *is, int64_t value); //查找某个元素是否在集合中
int64_t intsetRandom(intset *is); //整数集合中随机返回一个元素
uint8_t intsetGet(intset *is, uint32_t pos, int64_t *value); //取出给定索引的元素
uint32_t intsetLen(const intset *is); //返回元素个数
size_t intsetBlobLen(intset *is); //返回整数集合占中内存字节数量

intsetAdd新元素流程图
redis源码浅析--五-整数集合的实现_第1张图片

你可能感兴趣的:(redis)