redis
MRBA
这个作者很懒,什么都没留下…
展开
-
数据结构-压缩列表
压缩列表的构成 压缩列表是redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点可以保持一个字节数组或者一个整数。 ...原创 2020-07-06 22:30:38 · 227 阅读 · 0 评论 -
数据结构-整数集合
整数集合的实现 每个intset.h/instset 结构表示一个整数集合 typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素的数量 uint32_t length; // 保存元素的数组 int8_t contents []; }intset; contents 数组是整数集合的底层实现:整数集合的每个元素都是contents数组的一个数组项,各个数组项的大小从小到大有序地排列,并且数组中不包含任何重复项。 length 属性记录整原创 2020-07-06 22:23:37 · 274 阅读 · 0 评论 -
数据结构-跳跃表
跳跃表的实现 跳跃表由redis.h/zskiplistNode和redis.h/zskiplist两个结构定义 header: 指向跳跃表的表头节点 tail: 指向跳跃表的表尾节点 level: 记录目前跳跃表内,层数最大的那个节点的层数,表头节点不包括在内 length: 记录跳跃表的长度,跳跃表目前包含节点的数量,表头节点不计算在内 BW : 后退指针,指向当前节点的前一个节点。后退指针在程序中从表尾向表头遍历时使用 分值: 各个节点中的1.0,2.0和3.0是节点的分值。在跳跃表中节点按各自所保原创 2020-07-06 21:52:15 · 106 阅读 · 0 评论 -
数据结构-字典
字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对 哈希表 哈希表由dict.h/dictht结构定义 typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值 // 总是等于size-1 unsigned long sizemask; // 哈希表已有节点的数量 unsigned long原创 2020-07-01 23:08:03 · 255 阅读 · 0 评论 -
数据结构-链表
链表和链表节点的实现 链表节点 每个链表节点使用一个adlist.h/listNode 结构表示 typedef struct listNode { //前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value; }listNode; adlist.h/list 来持有链表 typedef struct list { // 表头节点 listNode *head; // 表尾节点 l原创 2020-07-01 22:44:11 · 96 阅读 · 0 评论 -
数据结构-简单动态字符串
SDS(simple synamic String)用作Redis默认字符串表示。C字符串只会作为字符串字面量用在一些无须对字符串进行修改的地方,例如打印日志等。 SDS定义 每个sds.h/sdshdr结构表示一个SDS值 struct sdshdr { //字符串的长度 int len; // buf数组中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[]; } SDS遵循C字符串以空字符结尾的惯例,保存空字符的一字节空间不计算再SDS的len属性,原创 2020-07-01 22:19:38 · 202 阅读 · 0 评论