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
相關文章
相關標籤/搜索