文章目錄 第一階段 第二階段 熟悉Redis的內存編碼結構 第三階段 熟悉Redis數據類型的實現 第四階段 熟悉Redis數據庫的實現 第五階段 熟悉客戶端和服務器端的代碼實現 第六階段 這一階段主要是熟悉Redis多機部分的代碼實現 關于測試方面的文件有 一些工具類的文件如下 SORT命令的實現一些封裝類的代碼實現
第一階段
閱讀Redis的數據結構部分,基本位于如下文件中:
內容 文件名 內存分配 zmalloc.c和zmalloc.h 動態字符串 sds.h和sds.c 雙端鏈表 adlist.c和adlist.h 字典 dict.h和dict.c 跳躍表 server.h文件里面關于zskiplist結構和zskiplistNode結構,以及t_zset.c中所有zsl開頭的函數 基數統計 hyperloglog.c 中的 hllhdr 結構, 以及所有以 hll 開頭的函數
第二階段 熟悉Redis的內存編碼結構
內容 文件名 整數集合數據結構 intset.h和intset.c 壓縮列表數據結構 ziplist.h和ziplist.c
第三階段 熟悉Redis數據類型的實現
內容 文件名 對象系統 object.c 字符串鍵 t_string.c 列表鍵 t_list.c 散列鍵 t_hash.c 集合鍵 t_set.c 有序集合鍵 t_zset.c中除 zsl 開頭的函數之外的所有函數 HyperLogLog鍵 hyperloglog.c中所有以pf開頭的函數
第四階段 熟悉Redis數據庫的實現
內容 文件名 數據庫實現 redis.h文件中的redisDb結構,以及db.c文件 通知功能 notify.c RDB持久化 rdb.c AOF持久化 aof.c
獨立功能模塊的實現 發布和訂閱 redis.h文件的pubsubPattern結構,以及pubsub.c文件 事務 redis.h文件的multiState結構以及multiCmd結構,multi.c文件
第五階段 熟悉客戶端和服務器端的代碼實現
內容 文件名 事件處理模塊 ae.c/ae_epoll.c/ae_evport.c/ae_kqueue.c/ae_select.c 網路鏈接庫 anet.c和networking.c 服務器端 redis.c 客戶端 redis-cli.c
這個時候可以閱讀下面的獨立功能模塊的代碼實現
內容 文件名 lua腳本 scripting.c 慢查詢 slowlog.c 監視 monitor.c
第六階段 這一階段主要是熟悉Redis多機部分的代碼實現
內容 文件名 復制功能 replication.c Redis Sentinel sentinel.c 集群 cluster.c
關于測試方面的文件有
內容 文件名 memtest.c 內存檢測 redis_benchmark.c 用于redis性能測試的實現 redis_check_aof.c 用于更新日志檢查的實現 redis_check_dump.c 用于本地數據庫檢查的實現 testhelp.c 一個C風格的小型測試框架。
一些工具類的文件如下
內容 文件名 bitops.c GETBIT、SETBIT 等二進制位操作命令的實現 debug.c 用于調試時使用 endianconv.c 高低位轉換,不同系統,高低位順序不同 help.h 輔助于命令的提示信息 lzf_c.c 壓縮算法系列 lzf_d.c 壓縮算法系列 rand.c 用于產生隨機數 release.c 用于發布時使用 sha1.c sha加密算法的實現 util.c 通用工具方法 crc64.c 循環冗余校驗 sort.c 排序
SORT命令的實現一些封裝類的代碼實現
內容 文件名 bio.c background I/O的意思,開啟后臺線程用的 latency.c 延遲類 migrate.c 命令遷移類,包括命令的還原遷移等 pqsort.c 排序算法類 rio.c redis定義的一個I/O類 syncio.c 用于同步Socket和文件I/O操作