菜鸟从Redis源码学习C语言

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辅助文件
  1. asciilogo.h:Redis启动时logo图形的输出

  2. version.h:版本号定义

  3. help.h:命令帮助信息

分析的源代码请移步:https://github.com/shixinke/redis-source-code-analysis