![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
theanarkh
这个作者很懒,什么都没留下…
展开
-
redis0.1源码解析之基本原理
本文分析redis的基础原理,暂不做深入分析,后续再详细分析。我们从main函数开始。 int main(int argc, char **argv) { initServerConfig(); initServer(); aeCreateFileEvent(server.el, server.fd, AE_READABLE, acceptHandler, NULL, NULL) aeMain(server.el); return 0; } 下面就四个函数进行分析原创 2020-05-25 00:46:17 · 280 阅读 · 0 评论 -
redis0.1源码解析之事件驱动
redis的事件驱动模块负责处理文件和定时器两种任务。 下面是几个函数指针 typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask); typedef int aeTimeProc(struct aeEventLoop *eventLoop, long long id, void *clientData); typedef void aeEventFinalizerProc(struc原创 2020-05-24 19:53:02 · 247 阅读 · 0 评论 -
redis0.1源码解析之链表
分析代码之前先看看链表的数据结构。 1 新建一个链表 // 新建一个链表头结点 list *listCreate(void) { struct list *list; if ((list = zmalloc(sizeof(*list))) == NULL) return NULL; // 空链表,还没有节点 list->head = list->tail = NULL; // 链表中的节点数 list->len = 0;原创 2020-05-24 19:29:33 · 152 阅读 · 0 评论 -
redis0.1源码解析之字典
字典也叫哈希表。看一下redis中的实现。下面是数据结构关系图。 redis中,哈希表的设计思想是,申请一个指针数组,然后每个元素指向一个链表用来存储数据(即链地址法)。 1 创建一个字典 // 申请一个表示字典的数据结构 dict *dictCreate(dictType *type, void *privDataPtr) { dict *ht = _dictAlloc(sizeof(*ht)); _dictInit(ht,type,privDataPtr);原创 2020-05-24 19:17:41 · 196 阅读 · 0 评论 -
redis0.1源码解析之内存分配
这是redis源码分析的第一篇,选取早期版本,一睹redis的基础原理。这篇分析内存分配。 redis内存管理是对malloc系列函数做了封装。额外记录了申请的内存大小信息。 #include <stdlib.h> #include <string.h> static size_t used_memory = 0; /* 分配sizeof(size_t)+size大小的内存,前面sizeof(size_t)个字节记录本次分配的大小, 记录分配的总内存大小,返回用于原创 2020-05-24 18:27:32 · 188 阅读 · 0 评论