? Redis5.0.8的目录主要由四个部分组成deps、src、tests、utils。另外在根目录下有两个重要的配置文件,一个是redis.conf 这个是Redis启动运行参数相关的配置文件,另一个是sentinel.conf 哨兵功能的配置文件。
deps目录
? 通过阅读当前目录下的README.md 可以知道deps 目录下是第三方依赖和官方C语言客户端hiredis 。当然,Redis也依赖libc(标准c库),只是这个库是来自系统平台的。
? jemalloc 是一个第三方的内存管理器,可以用于替代默认的malloc , 当然,这是一个可选项,并非强制要求的。
Linenoise 是一个开源的命令行工具,支持历史命令。轻量级别的,如果我们要用的话可以直接包含在代码里面,我没有仔细研究它的接口与实现,后面有机会用到了可以研究一下。
? lua ,lua脚本。
src
? src目录下有一个modules 目录包含了一个实现Redis module 的示例代码,Redis其余功能模块的代码直接放在了src 下面。
? 可能以后大部分时间都是在阅读这个目录下的代码。
? 这里面源码文件名字与功能模块基本能对应上。总体来讲可以分为几个方面:
- 服务器本身相关功能比如服务器启动、配置读取、网络通信,内部是如何组织各种类型的数据的。
- Redis里面各种数据结构的实现
- 持久化,
AOF 和RDB - 分布式集群相关的东西
具体源码结构:
数据类型: - String(t_string.c、sds.c、bitops.c) - List(t_list.c、ziplist.c) - Hash(t_hash.c、ziplist.c、dict.c) - Set(t_set.c、intset.c) - Sorted Set(t_zset.c、ziplist.c、dict.c) - HyperLogLog(hyperloglog.c) - Geo(geo.c、geohash.c、geohash_helper.c) - Stream(t_stream.c、rax.c、listpack.c)
全局: - Server(server.c、anet.c) - Object(object.c) - 键值对(db.c) - 事件驱动(ae.c、ae_epoll.c、ae_kqueue.c、ae_evport.c、ae_select.c、networking.c) - 内存回收(expire.c、lazyfree.c) - 数据替换(evict.c) - 后台线程(bio.c) - 事务(multi.c) - PubSub(pubsub.c) - 内存分配(zmalloc.c) - 双向链表(adlist.c)
高可用&集群: - 持久化:RDB(rdb.c、redis-check-rdb.c)、AOF(aof.c、redis-check-aof.c) - 主从复制(replication.c) - 哨兵(sentinel.c) - 集群(cluster.c)
辅助功能: - 延迟统计(latency.c) - 慢日志(slowlog.c) - 通知(notify.c) - 基准性能(redis-benchmark.c)
tests
? test 这个目录里面是一些tcl 写就的测试脚本。除了units 单元测试,cluster 集群功能测试、sentinel 哨兵功能测试,intergratition 主从复制功能测试,其他的为辅助这几个测试的目录。
utils
? 这里是一些辅助性功能的脚本或代码。
|