分类 源码阅读 中的文章

Redis源码剖析——内存管理zmalloc(二)

开始进入zmalloc的实现,以下代码位于zmalloc.c 1553937439992626.png 位于最开头的是zlibc_free,注释里讲得很明白,在包含zmalloc.h之前,先定义zlibc_free并且包含glibc中的stdlib.h,这样可以给我们提供了至少glibc的free实现,如果zmalloc……

阅读全文

Redis源码剖析——内存管理zmalloc(一)

犹记得当年学习C++的时候看STL的源码,侯捷的一个观点让我深以为然,在他的源码剖析中,空间配置器是放在最开头讲,很多人都不注意内存管理部分,而内存管理模块一般都不会耦合其他模块,所以即使你一直不看内存管理模块的实现也不影响对其他模块的研究,但你却会发现内存管理模块绝对是贯穿所有……

阅读全文

Redis源码剖析——原子操作

我们知道Redis的所有操作都是原子操作,无论是Get还是ISMEMBER、Set等操作,全部都可以放心使用,其内部保证了操作的原子性,Redis中最底层中基本原子操作的封装,其实并不麻烦,反而相当简洁,这部分代码位于atomicvar.h中。 总共就是这三个,事实上他们都是宏: 1553919915556723.png……

阅读全文

Redis源码剖析——ae(二)

开始进入ae事件库的实现,这部分代码位于ae.c 1553518087124571.png 同样,没有任何外部库的依赖,其中config.h配置头文件会决定IO多路复用的选取,如下 1553518189574268.png 此处按照性能降序排列,这四种实现都是对系统IO多路复用库API进行一定程度的封装,其中kqueue和evport用于FreeBSD和Sola……

阅读全文

Redis源码剖析——ae(一)

ae是一个Redis实现的事件库,为什么叫ae,如下 1553501010670582.png 一个事件库,又是Redis喜欢的命名方式,那么我们干脆也称其为ae事件库。 这个事件库非常的小巧并且精致,为什么这么说呢,因为它几乎毫无外部依赖,完全原生的实现,对于不同的系统IO多路复用都有一套最高效的实现:对于Solaris……

阅读全文

Redis源码剖析——adlist

adlist是一个普通的双向链表 为什么叫adlist? 1553417242987884.png redis作者算是首创了这种命名风格,axxxxx,后面我们还会看到类似的文件命名方式,意即“一个xxxxx”。 虽然是普通的链表,但Redis的adlist绝对也是C下双向链表的实现范式。 基本结构和方法的原型声明与定义(ad……

阅读全文

Redis源码剖析——概览

Redis至今刚好十年,其优秀的性能与高可用性综合起来可以说是目前最优秀的KV数据库,Redis被广泛用于各种缓存场景 个人认为以下是的Redis的核心优势 单机每秒十万高并发(官方数据) 操作的原生原子性 毫无外部库依赖,源码使用纯粹干净的ANSI C编写 丰富的数据结构可胜任几乎所有业务……

阅读全文