本文共 1566 字,大约阅读时间需要 5 分钟。
第一阶段
阅读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开头的函数 |
基数统计 | 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操作 |
转载地址:http://lzorb.baihongyu.com/