通过阅读 Redis 源码,可以学习和掌握到的计算机系统设计思想
根据 Redis 不同的功能特性,分线条学习每个功能特性上涉及的关键技术和设计思想
对于Redis的代码架构,需要掌握以下两类内容
代码的目录结构和作用划分,目的是理解 Redis 代码的整体架构,以及所包含的代码功能类别;
系统功能模块与对应代码文件,目的是了解 Redis 实例提供的各项功能及其相应的实现文件,以便后续深入学习。
对于阅读 Redis 源码来说,要先从整体上掌握源码的结构,所以需要先形成一幅 Redis 源码的全景图(基于 Redis 5.0.8 版本)
deps 目录
这个目录主要包含了 Redis 依赖的第三方代码库,包括 Redis 的 C 语言版本客户端代码 hiredis、jemalloc 内存分配器代码(用来替换 glibc 库的内存分配器)、readline 功能的替代代码 linenoise,以及 lua 脚本代码。这部分代码的一个显著特点,就是它们可以独立于 Redis src 目录下的功能源码进行编译,也就是说,它们可以独立于 Redis 存在和发展。
src 目录
这个目录里面包含了 Redis 所有功能模块的代码文件,也是 Redis 源码的重要组成部分。src 目录下只有一个 modules 子目录,其中包含了一个实现 Redis module 的示例代码。剩余的源码文件都是在 src 目录下。
tests 目录
这个目录里面是用于功能模块测试和单元测试的代码。Redis 实现的测试代码可以分成四部分,分别是单元测试(对应 unit 子目录),Redis Cluster 功能测试(对应 cluster 子目录)、哨兵功能测试(对应 sentinel 子目录)、主从复制功能测试(对应 integration 子目录)。这些子目录中的测试代码使用了 Tcl 语言(通用的脚本语言)进行编写,主要目的就是方便进行测试。
utils 目录
这个目录里面是在 Redis 开发过程中的一些辅助性功能,包括用于创建 Redis Cluster 的脚本、用于测试 LRU 算法效果的程序,以及可视化 rehash 过程的程序。
server.c-->main入口
、anet.c)