【重学Redis】如何快速阅读Redis源码

开课吧樵夫2021-12-22 16:49

  面试大型互联网公司时,不仅要求面试官简单使用Redis,还要了解Redis源代码层面的实现原理,具备解决常见问题的能力。可以说,熟练使用Redis只是一个入门,真正掌握Redis源代码才是真正的考验。

  如何快速阅读Redis源码

  从这节课开始,咱们将进入Redis的源码阅读环节。那么,我们要怎么阅读源码呢?

  还记得咱们再安装Redis的时候下载的redis源码吗,我们把它解压,就得到了Redis的源码,然后咱们安装clion软件进项源码的阅读,选择它的主要原因是风格和idea一样,如果大家习惯使用其他IDE,也可以,毕竟咱们的目的是阅读它的源码,只要能看到代码都是可以的

  安装完clion后选择File->Open->选择代码,把源码导入即可

【重学Redis】如何快速阅读Redis源码

  再阅读源码之前,我们先要了解Redis的目录机构,以及Redis每个功能模块对应的源码文件,这样可以帮助我们更有效的阅读源码

  Redis目录结构

  Redis源码目录下,一共包含了deps、src、tests、utils四个子目录。

  deps 目录

  deps 目录这个目录主要包含了 Redis 依赖的第三方代码库

  Jemalloc是内存分配器,默认情况下用作Linux上libc malloc的替代品。它具有良好的性能和出色的碎片行为。但是jemalloc 库本身又不属于 Redis 系统自身的功能,所以,Redis 使用了专门的 deps 目录来保存这部分代码。

  hiredis是 Redis 的官方 C语言客户端库。它被 redis-cli、redis-benchmark 和 Redis Sentinel 使用。它是Redis官方生态系统的一部分,但是客户端和服务端只要能通信即可,所以它和服务端是独立开发的,放在deps目录也是比较合适的。

  Hiredis对Sentinel来说也非常关键,因为不同服务端通信类似于服务端和客户端通信

  linenoise是readline 功能的替代代码。它由Redis的作者开发,但作为一个单独的项目进行管理,所以也放在deps目录

  lua也是独立于Redis的,但是Redis整合了lua,所以也放在deps目录

  综上所述,Redis 依赖的,独立于 Redis 开发演进的代码,Redis整合的这些代码放到了deps 目录。

【重学Redis】如何快速阅读Redis源码

  tests 目录

  tests目录包含多个子目录,其中unit 子目录功能是单元测试,包含redis的各种命令的测试,每个测试文件测试多个命令,比如string.tcl测试了set,get等命令;cluster 子目录是用来测试集群功能的;sentinel 子目录是用来测试哨兵功能的;integration 子目录是用来测试主从复制功能的

  除了针对特定功能的测试外,还有一些是用来支撑测试功能的,比如assets子目录存放了default.conf文件,保存的是redis默认的一些配置,相当默认配置文件;helpers子目录存放了辅助的测试代码,比如bg_block_op.tcl用于创建阻塞条件;modules子目录和support子目录也都是类似的支持目录