Redis
Redis
参考 https://zeeech.github.io/categories/redis/
参考 https://github.com/3masterplus/book
参考 https://github.com/huangz1990/redis-3.0-annotated
参考 http://doc.redisfans.com/index.html
参考 http://www.calvinneo.com/tags/redis/
参考 https://blog.huangz.me/diary/2014/how-to-read-redis-source-code.html
链接 https://www.zhihu.com/question/28677076/answer/134193549
文件 | 作用 |
---|---|
adlist.c 、 adlist.h |
双端链表数据结构的实现。 |
ae.c 、 ae.h 、 ae_epoll.c 、 ae_evport.c 、 ae_kqueue.c 、 ae_select.c |
事件处理器,以及各个具体实现。 |
anet.c 、 anet.h |
Redis 的异步网络框架,内容主要为对 socket 库的包装。 |
aof.c |
AOF 功能的实现。 |
asciilogo.h |
保存了 Redis 的 ASCII LOGO 。 |
bio.c 、 bio.h |
Redis 的后台 I/O 程序,用于将 I/O 操作放到子线程里面执行, 减少 I/O 操作对主线程的阻塞。 |
bitops.c |
二进制位操作命令的实现文件。 |
blocked.c |
用于实现 BLPOP 命令和 WAIT 命令的阻塞效果。 |
cluster.c 、 cluster.h |
Redis 的集群实现。 |
config.c 、 config.h |
Redis 的配置管理实现,负责读取并分析配置文件, 然后根据这些配置修改 Redis 服务器的各个选项。 |
crc16.c 、 crc64.c 、 crc64.h |
计算 CRC 校验和。 |
db.c |
数据库实现。 |
debug.c |
调试实现。 |
dict.c 、 dict.h |
字典数据结构的实现。 |
endianconv.c 、 endianconv.h |
二进制的大端、小端转换函数。 |
fmacros.h |
一些移植性方面的宏。 |
help.h |
utils/generate-command-help.rb 程序自动生成的命令帮助信息。 |
hyperloglog.c |
HyperLogLog 数据结构的实现。 |
intset.c 、 intset.h |
整数集合数据结构的实现,用于优化 SET 类型。 |
lzf_c.c 、 lzf_d.c 、 lzf.h 、 lzfP.h |
Redis 对字符串和 RDB 文件进行压缩时使用的 LZF 压缩算法的实现。 |
Makefile 、 Makefile.dep |
构建文件。 |
memtest.c |
内存测试。 |
mkreleasehdr.sh |
用于生成释出信息的脚本。 |
multi.c |
Redis 的事务实现。 |
networking.c |
Redis 的客户端网络操作库, 用于实现命令请求接收、发送命令回复等工作, 文件中的函数大多为 write 、 read 、 close 等函数的包装, 以及各种协议的分析和构建函数。 |
notify.c |
Redis 的数据库通知实现。 |
object.c |
Redis 的对象系统实现。 |
pqsort.c 、 pqsort.h |
快速排序(QuickSort)算法的实现。 |
pubsub.c |
发布与订阅功能的实现。 |
rand.c 、 rand.h |
伪随机数生成器。 |
rdb.c 、 rdb.h |
RDB 持久化功能的实现。 |
redisassert.h |
Redis 自建的断言系统。 |
redis-benchmark.c |
Redis 的性能测试程序。 |
redis.c |
负责服务器的启动、维护和关闭等事项。 |
redis-check-aof.c 、 redis-check-dump.c |
RDB 文件和 AOF 文件的合法性检查程序。 |
redis-cli.c |
Redis 客户端的实现。 |
redis.h |
Redis 的主要头文件,记录了 Redis 中的大部分数据结构, 包括服务器状态和客户端状态。 |
redis-trib.rb |
Redis 集群的管理程序。 |
release.c 、 release.h |
记录和生成 Redis 的释出版本信息。 |
replication.c |
复制功能的实现。 |
rio.c 、 rio.h |
Redis 对文件 I/O 函数的包装, 在普通 I/O 函数的基础上增加了显式缓存、以及计算校验和等功能。 |
scripting.c |
脚本功能的实现。 |
sds.c 、 sds.h |
SDS 数据结构的实现,SDS 为 Redis 的默认字符串表示。 |
sentinel.c |
Redis Sentinel 的实现。 |
setproctitle.c |
进程环境设置函数。 |
sha1.c 、 sha1.h |
SHA1 校验和计算函数。 |
slowlog.c 、 slowlog.h |
慢查询功能的实现。 |
solarisfixes.h |
针对 Solaris 系统的补丁。 |
sort.c |
SORT 命令的实现。 |
syncio.c |
同步 I/O 操作。 |
testhelp.h |
测试辅助宏。 |
t_hash.c 、 t_list.c 、 t_set.c 、 t_string.c 、 t_zset.c |
定义了 Redis 的各种数据类型,以及这些数据类型的命令。 |
util.c 、 util.h |
各种辅助函数。 |
valgrind.sup |
valgrind 的suppression文件。 |
version.h |
记录了 Redis 的版本号。 |
ziplist.c 、 ziplist.h |
ZIPLIST 数据结构的实现,用于优化 LIST 类型。 |
zipmap.c 、 zipmap.h |
ZIPMAP 数据结构的实现,在 Redis 2.6 以前用与优化 HASH 类型, Redis 2.6 开始已经废弃。 |
zmalloc.c 、 zmalloc.h |
内存管理程序。 |
第一阶段
- 阅读Redis的数据结构部分,基本位于如下文件中:内存分配 zmalloc.c和zmalloc.h
- 动态字符串 sds.h和sds.c
- 双端链表 adlist.c和adlist.h
- 字典 dict.h和dict.c
- 跳跃表 server.h文件里面关于zskiplist结构和zskiplistNode结构,以及t_zset.c中所有zsl开头的函数,比如 zslCreate、zslInsert、zslDeleteNode等等。
- 基数统计 hyperloglog.c 中的 hllhdr 结构, 以及所有以 hll 开头的函数
第二阶段 熟悉Redis的内存编码结构
- 整数集合数据结构 intset.h和intset.c
- 压缩列表数据结构 ziplist.h和ziplist.c
第三阶段 熟悉Redis数据类型的实现
- 对象系统 object.c
- 字符串键 t_string.c
- 列表建 t_list.c
- 散列键 t_hash.c
- 集合键 t_set.c
- 有序集合键 t_zset.c中除 zsl 开头的函数之外的所有函数
- HyperLogLog键 hyperloglog.c中所有以pf开头的函数
第四阶段 熟悉Redis数据库的实现
- 数据库实现 redis.h文件中的redisDb结构,以及db.c文件
- 通知功能 notify.c
- RDB持久化 rdb.c
- AOF持久化 aof.c
以及一些独立功能模块的实现
- 发布和订阅 redis.h文件的pubsubPattern结构,以及pubsub.c文件
- 事务 redis.h文件的multiState结构以及multiCmd结构,multi.c文件
第五阶段 熟悉客户端和服务器端的代码实现
- 事件处理模块 ae.c/ae_epoll.c/ae_evport.c/ae_kqueue.c/ae_select.c
- 网路链接库 anet.c和networking.c
- 服务器端 redis.c
- 客户端 redis-cli.c
- 这个时候可以阅读下面的独立功能模块的代码实现
- lua脚本 scripting.c
- 慢查询 slowlog.c
- 监视 monitor.c
第六阶段 这一阶段主要是熟悉Redis多机部分的代码实现
- 复制功能 replication.c
- Redis Sentinel sentinel.c
- 集群 cluster.c
其他代码文件介绍
关于测试方面的文件有:
- memtest.c 内存检测
- redis_benchmark.c 用于redis性能测试的实现。
- redis_check_aof.c 用于更新日志检查的实现。
- redis_check_dump.c 用于本地数据库检查的实现。
- testhelp.c 一个C风格的小型测试框架。
一些工具类的文件如下:
- bitops.c GETBIT、SETBIT 等二进制位操作命令的实现
- debug.c 用于调试时使用
- endianconv.c 高低位转换,不同系统,高低位顺序不同
- help.h 辅助于命令的提示信息
- lzf_c.c 压缩算法系列
- lzf_d.c 压缩算法系列
- rand.c 用于产生随机数
- release.c 用于发布时使用
- sha1.c sha加密算法的实现
- util.c 通用工具方法
- crc64.c 循环冗余校验
- sort.c SORT命令的实现
- 一些封装类的代码实现:
- bio.c background I/O的意思,开启后台线程用的
- latency.c 延迟类
- migrate.c 命令迁移类,包括命令的还原迁移等
- pqsort.c 排序算法类
- rio.c redis定义的一个I/O类
- syncio.c 用于同步Socket和文件I/O操作
================ End
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2018-01-29 端口相关知识学习笔记