简单动态字符串(SDS),双端链表,字典,压缩列表,整数集合等数据结构。 构成字符串对象,列表对象,哈希对象,集合对象,有序集合对象五种类型。 针对不同的使用场景设置不同的数据结构实现,从而优化使用效率。 redis对象系统基于引用技术的内存回收机制和对象共享机制。 还有维护一个lru值,空转时长较 Read More
posted @ 2021-05-08 15:14 Ldler Views(43) Comments(0) Diggs(0) Edit
压缩列表是列表键和哈希键的底层实现之一。 只包含少量列表项,且都为小整数或者短字符串那么redis会将压缩列表作为列表键使用 压缩列表的构成 zlbytes: uint32_t类型占四个字节,记录整个压缩列表占用的内存字节数。在对压缩列表内存重分配或者计算zlend的位置时使用。 zltail:ui Read More
posted @ 2021-05-08 15:11 Ldler Views(96) Comments(0) Diggs(0) Edit
当一个集合中数量不多且只包含整数元素,redis则用整数集合来作为集合的底层实现。 typedef struct intset{ //编码方式 uint32_t encoding; //集合包含的元素数量 uint32_t length; //保存元素的数组 int8_t contents[]; } Read More
posted @ 2021-05-08 15:09 Ldler Views(56) Comments(0) Diggs(0) Edit
跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 查找效率平均O(logn),最坏O(N),redis有序集合键的底层实现之一。 zskiplist包含四个重要成员变量 header:指向跳跃表的表头节点。 tail:指向跳跃表 Read More
posted @ 2021-05-08 15:08 Ldler Views(69) Comments(0) Diggs(0) Edit
字典,用于保存键值对的抽象数据结构。 每个键都是独一无二的。 Redis的数据库就是使用字典作为底层实现的。 还是哈希键的底层实现之一,当一个hash键包含的键值对比较多,又或者键值对中的元素都是比较长的字符串时,Redis就用字典作为哈希键的底层实现 哈希表 typedef struct dict Read More
posted @ 2021-05-08 15:06 Ldler Views(56) Comments(0) Diggs(0) Edit
简单动态字符串(SDS) struct sdshdr { //记录buf数组中已使用字节的数量 //等于SDS所保存字符串的长度 int len; //记录buf数组中未使用字节的数量 int free; //字节数组,用于保存字符串 char buf[]; } 一般会留最后一个字节来保存'\0', Read More
posted @ 2021-05-08 14:56 Ldler Views(54) Comments(0) Diggs(0) Edit