Redis
fustcyasdy
这个作者很懒,什么都没留下…
展开
-
Redis源码整理笔记:intset与个人理解
intset 结构体typedef struct intset { uint32_t encoding; // 当前结构内所有元素的类型 uint32_t length; // contents 中元素个数,即整数集合中元素个数 int8_t contents[]; // 整数集合中存储的元素} intset;intset适用于集合全部是整数且个数不多的...原创 2020-03-01 11:18:34 · 129 阅读 · 0 评论 -
Redis源码整理笔记:ae与个人理解
AE 事件循环器: 一个简单的事件驱动的编程库,程序库封装了网络模型:evport、epoll、kqueue、select通过宏来控制引入不同模型的.c文件实现,不同操作系统定义不同的宏,编译时会编译对应的文件linux系统使用epoll,apple/Mac/bsd系统使用kqueue,__sun使用evport(宏__sun实际对应Solaris系统),其他操作系统如windows则使用...原创 2020-01-19 09:38:23 · 669 阅读 · 0 评论 -
Redis源码整理笔记:bio与个人理解
redis 通过bio完成3类任务:进行AOF的持久化关闭文件释放对象/* Background job opcodes */// 定义了3种类型的后台工作#define BIO_CLOSE_FILE 0 /* Deferred close(2) syscall. 文件关闭*/#define BIO_AOF_FSYNC 1 /* Deferred AOF fsync...原创 2020-01-19 09:26:21 · 339 阅读 · 0 评论 -
Redis源码整理笔记:zipmap与个人理解
Redis的zipmap和传统的散列结构有所不同,只能通过逐个遍历的方式来查找给定节点,zipmap也更节省内存空间;zipmap是分配一段连续的内存空间,不适合存放大量的数据,Redis的哈希结构存放少量数据时使用zipmap以节省空间,当数量达到给定值时会转为哈希表来存储;zipmap的增删改都可能会涉及内存的重分配。zipmap的结构...原创 2020-01-09 19:18:05 · 362 阅读 · 0 评论 -
Redis源码整理笔记:ziplist与个人理解
ziplist 是一种特殊编码的双向列表,特殊的设计有效提升了内存操作效率;ziplist的结点可以无序;也可以有序;ziplist允许同时存放字符串和整型类型,并且整型数被编码成真实的整型数而不是字符串序列,列表可以在头尾进行push和pop操作的时间复杂度都在常量范围O(1), 但是每次操作都涉及内存重分配,也...原创 2020-01-04 17:13:34 · 623 阅读 · 0 评论 -
Redis源码整理笔记:adlist与个人理解
adlist采用双向链表的形式list 列表定义// 定义list列表typedef struct list { listNode *head; // list列表的头节点 listNode *tail; // list列表的尾节点 // dup、free、match 均用于回调使用 void *(*dup)(void *ptr); ...原创 2019-12-28 15:37:49 · 151 阅读 · 0 评论 -
Redis源码整理笔记:sds与个人理解
SDS结构图上图是sds的内存结构,sds 包括5种类型的header,Header部分主要包括len(表示当前字节数组的长度,不包括空终止符)、alloc(表示当前字节数组已分配的最大容量,不包括header和终止符)、flags(header的类型标识,若获取flags字段仅需要将s1指针前移一个字节);buf 保存了字节数组真正的值,s1指向的便是buf首部;s1 实际指向的是字符串开始...原创 2019-12-28 14:24:47 · 312 阅读 · 0 评论 -
Redis源码整理笔记:dict与个人理解
rehash过程—示意图(1) rehash前:(2) ht[0].size为4,所以设置ht[1]的大小为2*ht[0].size=8,并为ht[1]分配内存空间:(3) rehash 进行中,将ht[0]的所有键值移动到ht[1]中,rehash重新计算哈希值和索引值,然后将键值对保存到ht[1]的指定位置上(4) 将ht[0]的所有元素全部移动到ht[1]中(5)rehas...原创 2019-12-21 17:03:30 · 124 阅读 · 0 评论