Redis是一款高效的内存缓存软件,以支持多种数据类型、支持持久化以及高性能著称,因此通过它的源码,来学习C语言是一个不错的主意。以C语言菜鸟身份,以Redis3.0.7为主版本对Redis进行浅显的原理分析。
虽然当前Redis的最新版本为Redis3.2.x系列,但相对而言,市面上使用较多的还是Redis3.0.x系列,而且Redis3.0.x系列的代码更加易懂,因此,采用Redis3.0.7这个版本的代码来剖析。
阅读顺序是 << Redis设计与实现>>一书的作者黄健宏先生的博文为参照:
1、数据结构的实现
(1)简单动态字符串的实现:
sds.h
sds.c
(2)双向链接的实现:
adlist.h
adlist.c
(3)字典的实现
dict.h
dict.c
(4)Redis跳跃表的实现
- redis.h
(5)Redis的hyperloglog的实现
- hyperloglog.c
2、内存编码数据结构的实现
(1)整数集合数据结构的实现
intset.h
intset.c
(2)压缩列表数据结构的实现
ziplist.h
ziplist.c
zipmap.h
zipmap.c
3、数据类型的实现
(1)Redis对象的实现
- object.c
(2)字符串键的实现
- t_string.c
(3)列表键的实现
- t_list.c
(4)散列(哈希)键的实现
- t_hash.c
(5)集合键的实现
- t_set.c
(6)有序集合键的实现
- t_zset.c
(7)hyperloglog键的实现
- hyperloglog.c
4、数据库的实现
(1)数据库的实现
- db.c
(2)数据库通知功能的实现
- notify.c
(3)RDB持久化的实现
rdb.h
rdb.c
(4)AOF持久化的实现
aof.h
aof.c
(5)其他相关
发布与订单功能的实现:redis.h pubsub.c
事务功能的实现:multi.c
排序功能的实现:sort.c pqsort.h pqsort.c
二进制操作:bitops.c
5、客户端与服务端的相关代码
(1)Redis事件处理器
ae.h
ae.c
ae_epoll.c
ae_evport.c
ae_kqueue.c
ae_select.c
(2)Redis网络连接库
networking.c
anet.h
anet.c
(3)单机Redis服务的实现
redis.h
redis.c
(4)其他相关
lua脚本功能的实现:scripting.c
慢查询功能的实现:slowlog.c
监视器功能的实现:monitor.c
6、多机与集群相关代码
(1)复制功能的实现
- replication.c
(2)Redis监控
sentinel.c
latency.h
latency.c (延误监控)
(3)集群的实现
cluster.h
cluster.c
7、其他功能
(1)内存管理
zmalloc.h
zmalloc.c
memtest.c
(2)配置文件相关操作(解析与config set/get命令)
config.h
config.c
(3)Redis的IO服务
bio.h
bio.c:后台I/O操作
rio.h
rio.c:Redis简单的I/O操作
syncio.c:异步I/O
blocked.c:阻塞操作实现
(4)Redis工具实现
util.h
util.c
redis-benchmark.c :基准测试
redis-check-aof.c:对AOF持久化文件的操作
redis-check-dump.c:对RDB持久化文件的保管
redis-cli:客户端
(5)加密算法
crc16.c
crc64.h
crc64.c
sha1.h
sha1.c
(6)调试支持
debug.c
redisassert.h
(7)Endian转换(低位编址与高位编址的转换)
endianconv.h
endianconv.c
(8)压缩操作
lzf.h
lzfP.h
lzf_c.c
lzf_d.c
(9)生成随机数
rand.h
rand.c
(10)Redis辅助文件
asciilogo.h:Redis启动时logo图形的输出
version.h:版本号定义
help.h:命令帮助信息
分析的源代码请移步:https://github.com/shixinke/redis-source-code-analysis