系列文章目录
01 - 使用VS Code调试Redis源码
02 - Redis源码结构介绍
就像看书要先看目录了解整本书的结构一样,读源码也要纵览目录结构,了解其组织方式。
本文可以看作是Redis 源码剖析与实战 # 01 | 带你快速攻略Redis源码的整体架构 一文的笔记,原文比较详细,笔记就略过了我尚未阅读的源码。
源码目录介绍
目录总览
在排除了一些无关紧要的文件之后,项目的一级目录如下所示:
.
├── runtest // 执行Redis单元测试
├── runtest-cluster // 执行集群相关测试
├── runtest-sentinel // 执行哨兵相关测试
├── redis.conf // redis启动配置文件
├── sentinel.conf // 哨兵方式启动配置文件
├── deps // 依赖的第三方库
├── src // 功能模块源码
├── tests // 测试代码
└── utils // 辅助工具
一级目录及其子目录作用如下所示:
deps目录
deps
目录下存放的是第三方代码库。
一般有两种类型的代码会放在此目录下:
-
替代标准glibc库的功能
- 如Redis可以选择不同的内存分配器,用jemalloc作为内存分配器以替代标准的glibc内存分配器以解决glibc内存分配碎片过多等问题
- 如使用linenoise替代readline处理命令行
-
可以独立于Redis演进的代码,比如客户端
总之deps
目录下的代码特点就是:可以独立于src目录编译。
src 目录
src
是与Redis功能有关的代码,未来阅读的都是这个目录下的代码。
这个目录下的代码比较重要,后面的章节会从功能的角度去分类介绍各个源码文件的用途。
tests 目录
顾名思义,这个目录下是与Redis测试有关的代码,使用Tcl这门语言编写。
之前跟着2.8版本的代码阅读,苦于不清楚如何运行测试脚本,但阅读的redis-3.0-annotated源码中提供了运行测试的shell脚本。
项目的一级目录中,runtest
、 runtest-cluster
、runtest-sentinel
可以运行对应的单元测试、集群测试以及哨兵测试。
在本机尝试运行
sh runtest
正常输出,但runtest-cluster
以及runtest-sentinel
无法成功执行,此中原因暂未确认。
utils目录
这个目录下存放的是一些工具类代码