Redis源碼解析-全覽


通過閱讀 Redis 源碼,可以學習和掌握到的計算機系統設計思想

根據 Redis 不同的功能特性,分線條學習每個功能特性上涉及的關鍵技術和設計思想

對於Redis的代碼架構,需要掌握以下兩類內容

  • 代碼的目錄結構和作用划分,目的是理解 Redis 代碼的整體架構,以及所包含的代碼功能類別;

  • 系統功能模塊與對應代碼文件,目的是了解 Redis 實例提供的各項功能及其相應的實現文件,以便后續深入學習。

對於閱讀 Redis 源碼來說,要先從整體上掌握源碼的結構,所以需要先形成一幅 Redis 源碼的全景圖(基於 Redis 5.0.8 版本

  • deps 目錄

    這個目錄主要包含了 Redis 依賴的第三方代碼庫,包括 Redis 的 C 語言版本客戶端代碼 hiredis、jemalloc 內存分配器代碼(用來替換 glibc 庫的內存分配器)、readline 功能的替代代碼 linenoise,以及 lua 腳本代碼。這部分代碼的一個顯著特點,就是它們可以獨立於 Redis src 目錄下的功能源碼進行編譯,也就是說,它們可以獨立於 Redis 存在和發展。

  • src 目錄

    這個目錄里面包含了 Redis 所有功能模塊的代碼文件,也是 Redis 源碼的重要組成部分。src 目錄下只有一個 modules 子目錄,其中包含了一個實現 Redis module 的示例代碼。剩余的源碼文件都是在 src 目錄下。

  • tests 目錄

    這個目錄里面是用於功能模塊測試和單元測試的代碼。Redis 實現的測試代碼可以分成四部分,分別是單元測試(對應 unit 子目錄),Redis Cluster 功能測試(對應 cluster 子目錄)、哨兵功能測試(對應 sentinel 子目錄)、主從復制功能測試(對應 integration 子目錄)。這些子目錄中的測試代碼使用了 Tcl 語言(通用的腳本語言)進行編寫,主要目的就是方便進行測試。

  • utils 目錄

    這個目錄里面是在 Redis 開發過程中的一些輔助性功能,包括用於創建 Redis Cluster 的腳本、用於測試 LRU 算法效果的程序,以及可視化 rehash 過程的程序。

代碼分類(忽略.h頭文件)

數據類型:

  • String(t_string.c、sds.c、bitops.c)
  • List(t_list.c、ziplist.c、quicklist.c)
  • Hash(t_hash.c、ziplist.c、dict.c)
  • Set(t_set.c、intset.c)
  • Sorted Set(t_zset.c、ziplist.c、dict.c)
  • HyperLogLog(hyperloglog.c)
  • Geo(geo.c、geohash.c、geohash_helper.c)
  • Stream(t_stream.c、rax.c、listpack.c)

全局:

  • Serverserver.c-->main入口、anet.c)
  • Object(object.c)
  • 鍵值對(db.c)
  • 事件驅動(ae.c、ae_epoll.c、ae_kqueue.c、ae_evport.c、ae_select.c、networking.c)
  • 內存回收(expire.c、lazyfree.c)
  • 數據替換(evict.c)
  • 后台線程(bio.c)
  • 事務(multi.c)
  • PubSub(pubsub.c)
  • 內存分配(zmalloc.c)
  • 雙向鏈表(adlist.c)

高可用&集群:

  • 持久化:RDB(rdb.c、redis-check-rdb.c)、AOF(aof.c、redis-check-aof.c)
  • 主從復制(replication.c)
  • 哨兵(sentinel.c)
  • 集群(cluster.c)

輔助功能:

  • 延遲統計(latency.c)
  • 慢日志(slowlog.c)
  • 通知(notify.c)
  • 基准性能(redis-benchmark.c)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM