Redis源码分析-intset.h/c
来源:互联网 发布:软件服务外包协会 编辑:程序博客网 时间:2024/06/13 21:32
intset.h/c 是Redis 的整数set实现,intset的结构体如下:
基本结构:
typedef struct intset {
uint32_t encoding;uint32_t length;
int8_t contents[];
} intset;
intset的第一个成员encoding,表明contents中的存储数据的数据长度,可以是16bits, 32bits, 64bits。第二个成员length表示intset中的元素个数。
一些关键实现:
- 由于intset属于底层存储,所以在读取数据时,要考虑big endian 和little endian的问题。memrev64ifbe和intrev32ifbe函数,可以将big endian的数能够转换成littleendian值。
- intset使用数组(contents)来存储数据,数据按照由小到大的顺序存储,体现在intsetSearch这个函数的二分查找方法中。
- 当插入新元素时,首先判断encoding是否小于当前值,否则调用intsetUpgradeAndAdd函数,将原来intset中的数据都变成新的encoding,同时把新元素插入到set。
- 在执行intsetAdd和intsetRemove函数增删元素的时候,都要调用intsetResize增加或者减少空间,同时按照顺序插入或者删除元素。在移动元素时,使用intsetMoveTail,内部通过memmove实现。
0 0
- Redis源码分析-intset.h/c
- Redis源码分析(intset)
- 【redis源码分析】数字集合--intset
- Redis源码分析-内存数据结构intset
- redis源码分析-intset(整型集合)
- redis 源码 -- intset
- Redis源码剖析--整数集合Intset
- Redis源码分析(六)——整数集合(Intset)
- Redis 源码分析:dict.c 和 dict.h
- Redis 源码分析:dict.c 和 dict.h
- Redis intset
- redis dict.h源码分析
- redis源码分析(9)redis源码链表学习总结 adlist.h adlist.c
- redis源码分析(八)、redis数据结构之压缩ziplist--------ziplist.c ziplist.h学习笔记
- 【Redis源码剖析】 - Reids内置数据结构之整数集合intset
- Redis源码剖析和注释(五)--- 整数集合(intset)
- NoSql之Redis整数集合(intset)源码探究
- redis之intset
- 通过adb把apk安装到系统分区
- Java学习整理系列之ThreadLocal的理解
- 经典图算法Java代码实践:BFS,DFS以及几种最短路径算法
- Web相关Cache介绍
- BZOJ3289
- Redis源码分析-intset.h/c
- 重载类型转换运算符
- RT5350无线视频监控
- 在Service中使用提示框
- Zoj 3587 Marlon's String (KMP 字符串拼接 前缀出现次数)
- iOS Storyboard 中多个view 之间传送数据
- poj3020
- vs.net开发带reportviewer的webpart中遇到的问题(转)
- 一道推理题