redis源码-目录结构

目录结构

|
|--deps
|
|-- src
   -- adlist.c          双链表结构,用于定义list
   -- ae.c              用于事件的处理
   -- ae_epoll.c        处理epoll事件
   -- ae_evport.c       通过event ports实现处理结构
   -- ae_kqueue.c       实现消息队列的处理
   -- ae_select.c       处理select事件
   -- anet.c            网络处理
   -- aof.c             实现aof模式
   -- asciilogo.h       定义欢迎界面的logo
   -- bio.c             在后台通过线程模式实现io处理
   -- bitops.c          与setbit,getbit相关的位操作
   -- blocked.c         支持类似blpop,wait的阻塞操作
   -- cluster.c         与集群创建,通信相关操作
   -- config.c          配置文件的解析
   -- crc16.c           基于CCITT标准的过滤算法
   -- crc64.c
   -- db.c              c-level数据库api实现
   -- debug.c           调试库和日志输出
   -- dict.c            字典实现
   -- endiancov.c       主机字节序编解码, redis致力于使用little endian来编码
   -- fmacros.h         用于Mac下的兼容性处理
   -- help.h            辅助于命令的提示信息
   -- hyperloglog.c
   -- intset.c          int集合类型实现
   -- lzf_c.c           lzf压缩算法
   -- lzf_d.c
   -- memtest.c         内存测试
   -- muti.c            批量命令操作的原子实现
   -- networking.c      网络通信实现
   -- notify.c
   -- object.c          对象存储类型
   -- pqsort.c          一种快速排序的实现
   -- pubsub.c          用于订阅模式的实现,有点类似于Client广播发送的方式
   -- rand.c            随机序列的生产
   -- rdb.c             rdb数据的load和dump
   -- redis.c           redis数据库的主程序入口
   -- redis-benchmark.c redis基准测试入口
   -- redis-check-aof.c aof文件检查入口
   -- redis-check-dump.c dump文件检查入口
   -- redis-cli.c       redis的shell的客户端
   -- release.c         版本发布信息
   -- replication.c     数据的主从备份
   -- rio.c             流式I/O的读写接口
   -- scripting.c       redis相关协议转换到lua环境下执行
   -- sds.c             强大的字符串处理机制
   -- sentinel.c        redis集群的监护程序
   -- setproctitle.c    程序名信息相关
   -- sha1.c            sha1加密算法
   -- slowlog.c         记录最近一段时间的查询等操作
   -- sort.c            排序算法及辅助函数
   -- syncio.c          同步io的实现
   -- t_hash.c          hash结构
   -- t_list.c          list结构
   -- t_set.c           set结构
   -- t_string.c        string结构
   -- t_zset.c          用两种数据结构存储同一个数据体
   -- util.c            辅助函数
   -- ziplist.c         ziplist结构
   -- zipmap.c          zipmap结构
   -- zmalloc.c         在malloc上进行封装,增加内存开销统计
|
|--tests
|
|--utils

源码阅读顺序

数据结构实现

sds.h,sds.c 动态字符串实现
adlist.h,adlist.c 双端链表实现
dict.h,dict.c 字典的实现

redis.h中的zskiplist结构和zskiplistNode结构,以及t_zset.c中所有以zsl开头的函数,比如zslCreate,zslInsert,zslDeleteNode 跳跃表实现

hyperloglog.c中的hllhdr结构,以及所有以hll开头的函数。 HyperLogLog实现

阅读内存编码数据结构实现

intset.c 整数集合数据结构。
ziplist.c 压缩列表数据结构

阅读数据类型实现

object.c 对象系统实现
t_string.c 字符串键的实现
t_list.c 列表键的实现
t_hash.c 散列键的实现
t_set.c 集合键的实现
t_zset.c中除zsl开头的函数之外的所有函数 有序集合键的实现
hyperloglog.c中所有以pf开头的函数 HyperLogLog 键的实现

阅读数据库实现相关代码

redis.h文件中的redisDb结构,以及 db.c文件 Redis的数据库实现
notify.c Redis的数据库通知功能实现代码
rdb.h和rdb.c Redis的RDB持久化实现代码
aof.c Redis 的 AOF 持久化实现代码

选读

redis.h文件的pubsubPattern结构,以及pubsub.c文件 发布与订阅功能的实现
redis.h文件的multiState结构以及multiCmd结构,multi.c文件 事务功能的实现
sort.c SORT命令的实现
bitops.c GETBIT,SETBIT等二进制位操作命令的实现

阅读客户端和服务器的相关代码

ae.c,以及任意一个 ae_*.c文件(取决于你所使用的多路复用库) Redis 的事件处理器实现
networking.c Redis 的网络连接库,负责发送命令回复和接受命令请求, 同时也负责创建/销毁客户端, 以及通信协议分析等工作
redis.h和redis.c中和单机Redis服务器有关的部分 单机 Redis 服务器的实现

选读

scripting.c Lua 脚本功能的实现
slowlog.c 慢查询功能的实现
monitor.c 监视器功能的实现

阅读多机功能的实现

replication.c 复制功能的实现代码
sentinel.c Redis Sentinel 的实现代码
cluster.c Redis 集群的实现代码

推荐阅读

[如何阅读redis](https://github.com/huangz1990/blog/blob/master/diary/2014/how-to-read-redis-source-code.rst '如何阅读redis')
[redis源码阅读](http://wiki.jikexueyuan.com/project/redis/provide-service.html 'redis源码阅读')
[redis自建命令](https://zhengqm.github.io/code/2015/06/20/Learn-by-hacking-redis-source-code/ 'redis自建命令')
[redis client/server交互流程](http://www.infoq.com/cn/articles/communication-redis-clientserver 'redis client/server交互流程')
坚持原创技术分享,您的支持将鼓励我继续创作!