Redis源码阅读环境搭建

1、准备工做

一、获取代码

fort redis仓库 github.com/redis/redis 拉取代码,切换到5.0分支,若是遇到github下载慢,能够直接在页面上切换5.0分支,而后把代码压缩包zip下载下来,但zip是不带git信息的。html

二、环境准备

演示一下如何在 Mac + CLion 阅读代码,Redis 源码编译使用 Makefile 文件,Clion 是不支持 make 命令的,默认支持CMake,网上有不少教程是教怎么写 CMakeLists 文件,能够参考这些教程:python

也有安装python3 再安装compiledb的方案:git

感受都有点繁琐,难道Clion就不能支持Make项目啦,因而在官网找到了:github

大致意思是支持了但可能不太好,同时还提供了 Makefile support 插件,那我就给官方一个机会,使用 CLion 2020.3.2 版本试试。redis

三、Clion 编译 Redis

1) 代码跳转插件 Makefile support

直接打开 redis 项目,打开 Makefile 文件,发现 CLion 和 IDEA 同样只能,不认识的文件会有提示。算法

安装插件,插件很小,安装很快也不须要重启 Clion。数据库

2) 编译

  1. 打开菜单栏 View -> Tool Windows -> Messages
  2. Build -> Rebuild Project

而后看到控制台一顿编译,很快生成了各类 *.o 文件服务器

3) Debug 运行程序

编辑程序启动配置如图,1和2两处都选择redis-servermarkdown

点击 Debug 按钮,见证奇迹的时候到了。网络

客户端也能链接上,就是服务端怎么也不打印日志,可能 redis 没什么日志。都说 redis 代码写的很优雅,咱也很久没看过C代码了,慢慢学吧。

3) Debug 代码

想在代码里打个断点调试下,好在南拳北图略知一二,曾经据说过 String 结构的实现代码在sds.c (Simple Dynamic String,简单动态字符串)。

执行命令 set soul gateway

断点起做用了,具体我也不看代码了

Notes:要是出现 build 菜单下 build project 置灰没法点击的时候,关闭项目,找到 redis/Makefile 文件,右击以 CLion 打开项目,发现能够从新编译了。

2、代码

网上抄了一份 Redis4.0 的代码阅读清单,虽然想看5的,但变更不大。 github.com/tracenow/re… 本身的更感兴趣的部分是:

  1. redis 做为一个小而美的分布式组件,它的高可用、高性能、高可扩展的取舍和代码实现
  2. redis 的网络怎么实现,想学学C是如何去实现非阻塞网络IO的
  3. 可能对于具体的数据结构没那么多兴趣,明白数据结构原理和时间复杂度就好,不太关心怎么实现

1、基础数据结构

2、Redis数据类型

  • 对象系统 object.c
  • 字符串键 t_string.c
  • 列表建 t_list.c
  • 哈希键 t_hash.c
  • 集合键 t_set.c
  • 有序集合键 t_zset.c(除zsl开头的全部函数)
  • HyperLogLog键 hyperloglog.c(pf开头的函数)
  • 地理位置 geo.h、geo.c

3、Redis数据库

  • 数据库实现 db.c
  • 通知功能 notify.c
  • RDB持久化 rdb.h、rdb.c
  • AOF持久化 aof.c

4、客户端/服务端

  • 事件处理模块 ae.h、ae.c、ae_epoll.c、ae_evport.c、ae_kqueue.c、ae_select.c
  • 网路连接库 anet.h、anet.c、networking.c
  • 服务器端 server.h、server.c
  • 客户端 redis-cli.c

5、分布式Redis

  • 复制功能 replication.c
  • Redis哨兵 sentinel.c
  • Redis集群 cluster.h、cluster.c

6、独立功能模块

  • 发布和订阅 pubsub.c
  • 事务 multi.c

7、测试

  • 内存检测 memtest.c
  • redis性能测试 redis_benchmark.c
  • 更新日志检查 redis_check_aof.c
  • 本地数据库检查 redis_check_rdb.c
  • C风格的小型测试框架 testhelp.c

8、工具类

  • 二进制位操做命令 bitops.c
  • 调试 debug.c
  • 高低位转换 endianconv.h、endianconv.c(适配不一样系统)
  • 辅助于命令的提示信息 help.h
  • 压缩算法 lzf.h、lzf_c.c、lzf_d.c、lzfP.h
  • 随机数 rand.h、rand.c
  • 版本发布 release.c
  • sha加密算法 sha1.h、sha1.c
  • 通用工具类 util.h、util.c
  • 循环冗余校验 crc16.c、crc64.h、crc64.c
  • SORT命令 sort.c
  • 伪随机函数 siphash.c
  • 进程信息操做 setproctitle.c
  • geo工具类 geohash_helper.h、geohash_helper.c

9、封装类

  • 后台线程I/O bio.h、bio.c
  • 延迟类 latency.h、latency.c
  • 排序算法类 pqsort.h、pqsort.c
  • Redis定义的I/O类 rio.h、rio.c
  • 同步Socket和文件I/O操做 syncio.c

10、其余

  • 微线图 sparkline.h、sparkline.c
  • 慢日志 slowlog.h、slowlog.c
  • 脚本 scripting.c
  • 过时机制 expire.c
相关文章
相关标签/搜索