Redis 源码阅读笔记,本文主要讲述 Redis 代码组织结构。


各个源码文件的作用简介

下表参考 Redis 3.0 源码注释,基于 Redis-6.0.8 源码版本进行相应修改。

File Name Meaning
acl.c Global state for ACLs
Y adlist.c, adlist.h 双向链表数据结构的实现
ae_epoll.c, ae_evport.c, ae_kqueue.c, ae_select.c, ae.c, ae.h 事件处理器,以及各个具体实现
anet.c, anet.h Redis 的异步网络框架,内容主要为对 socket 库的包装
Y aof.c AOF 功能的实现
asciilogo.h 保存了 Redis 的 ASCII LOGO
atomicvar.h Implements atomic counters
bio.c, bio.h Redis 的后台 I/O 程序,用于将 I/O 操作放到子线程里面执行, 减少 I/O 操作对主线程的阻塞
bitops.c 二进制位操作命令的实现文件
blocked.c 用于实现 BLPOP 命令和 WAIT 命令的阻塞效果
childinfo.c Child info
cluster.c, cluster.h Redis 的集群实现
config.c, config.h Redis 的配置管理实现,负责读取并分析配置文件,然后根据这些配置修改 Redis 服务器的各个选项
connection.c, connection.h, connhelpers.h Connection abstraction
crc16_slottable.h, crc16.c, crc64.c, crc64.h 计算 CRC 校验和
crcspeed.c, crcspeed.h
Y db.c 数据库实现
debug.c, debugmacro.h 调试实现
defrag.c
Y dict.c, dict.h 字典数据结构的实现
endianconv.c, endianconv.h 二进制的大端、小端转换函数
Y evict.c Maxmemory directive handling (LRU eviction and other policies).
Y expire.c Implementation of EXPIRE (keys with fixed time to live).
fmacros.h 一些移植性方面的宏
geo.c, geo.h, geohash_helper.c, geohash_helper.h, geohash.c, geohash.h
gopher.c
help.h utils/generate-command-help.rb 程序自动生成的命令帮助信息
hyperloglog.c HyperLogLog 数据结构的实现
Y intset.c, intset.h 整数集合数据结构的实现,用于优化整数 SET,以节省内存
latency.c, latency.h Latency monitor API 及其实现
lazyfree.c
listpack_malloc.h, listpack.c, listpack.h A lists of strings serialization format
localtime.c
lolwut.c, lolwut.h, lolwut5.c, lolwut6.c
lzf_c.c, lzf_d.c, lzf.h, lzfP.h Redis 对字符串和 RDB 文件进行压缩时使用的 LZF 压缩算法的实现
Makefile 构建文件
memtest.c 内存测试
mkreleasehdr.sh 用于生成释出信息的脚本
module.c, redismodule.h Redis Module 接口及其实现
multi.c Redis 的事务实现
Y networking.c Redis 的客户端网络操作库, 用于实现命令请求接收、发送命令回复等工作,文件中的函数大多为 write, read,close 等函数的包装,以及各种协议的分析和构建函数。
notify.c Redis 的数据库通知实现
Y object.c Redis 的对象系统实现
pqsort.c, pqsort.h 快速排序 (QuickSort) 算法的实现
pubsub.c 发布与订阅功能的实现
Y quicklist.c, quicklist.h A doubly linked list of ziplists
rand.c, rand.h 伪随机数生成器
Y rax_malloc.h, rax.c, rax.h A radix tree implementation
Y rdb.c, rdb.h RDB 持久化功能的实现
redis-benchmark.c Redis 的性能测试程序
redis-check-aof.c, redis-check-dump.c RDB 文件和 AOF 文件的合法性检查程序
redis-cli.c Redis 客户端的实现
redis-trib.rb Redis 集群的管理程序
redisassert.h Redis 自建的断言系统
release.c 记录和生成 Redis 的发行版本信息
Y replication.c 异步复制功能的实现
rio.c, rio.h Redis 对文件 I/O 函数的包装,在普通 I/O 函数的基础上增加了显式缓存、以及计算校验和等功能
scripting.c 脚本功能的实现
Y sds.c, sds.h, sdsalloc.h SDS 数据结构的实现,SDS 为 Redis 的默认字符串表示
sentinel.c Redis Sentinel 的实现
server.c 负责服务器的启动、维护和关闭等事项
server.h Redis 的主要头文件,记录了 Redis 中的大部分数据结构,包括服务器状态和客户端状态
setcpuaffinity.c, setproctitle.c 进程环境设置函数
sha1.c, sha1.h SHA1 校验和计算函数
sha256.c, sha256.h
siphash.c Keys hashing functions for dict.c hash tables.
slowlog.c, slowlog.h 慢查询功能的实现
solarisfixes.h 针对 Solaris 系统的补丁
sort.c SORT 命令的实现
sparkline.c, sparkline.h ASCII graphs API 及其实现
stream.h
syncio.c 同步 I/O 操作
t_hash.c, t_list.c, t_set.c, t_stream.c, t_string.c, t_zset.c 定义了 Redis 的各种数据类型,以及这些数据类型的命令
testhelp.h 测试辅助宏
timeout.c Blocked clients timeout and connections timeout.
tls.c
tracking.c
util.c, util.h 各种辅助函数
valgrind.sup valgrind 的 suppression 文件
version.h 记录了 Redis 的版本号
Y ziplist.c, ziplist.h Ziplist 数据结构的实现,用于优化 List 类型
zipmap.c, zipmap.h Zipmap 数据结构的实现,在 Redis 2.6 以前用于优化 Hash 类型,Redis 2.6 开始已经废弃
Y zmalloc.c, zmalloc.h 内存管理程序