Redis原始碼分析(一) Redis結構解析

2021-09-11 01:38:34 字數 2354 閱讀 1717

從今天起,本人將會展開對redis原始碼的學習,redis的**規模比較小,非常適合學習,是乙份非常不錯的學習資料,數了一下大概100個檔案左右的樣子,用的是c語言寫的。希望最終能把他啃完吧,c語言好久不用,快忘光了。分析原始碼的第一步,先別急著想著從哪開始看起,先瀏覽一下原始碼結構,可以模組式的漸入,不過比較坑爹的是,redis的原始碼全部放在在裡面的src目錄裡,一下90多個檔案統統在裡面了,所以我選擇了拆分,按功能拆分,有些檔案你看名字就知道那是幹什麼的。我拆分好後的而結果如下:

11個包,這樣每個包中的檔案就比較可接受了,但是分出這個類別,我也是花了一定時間,思考了下,redis下的主要的一些檔案的特徵,最後定的,應該算是比較全的了。

下面開始乙個包乙個包的介紹:

test:(測試)

1.memtest.c 記憶體檢測

2.redis_benchmark.c 用於redis效能測試的實現。

3.redis_check_aof.c 用於更新日誌檢查的實現。

4.redis_check_dump.c 用於本地資料庫檢查的實現。

5.testhelp.c 乙個c風格的小型測試框架。

struct:(結構體)

1.adlist.c 用於對list的定義,它是個雙向鍊錶結構

2.dict.c 主要對於記憶體中的hash進行管理

3.sds.c 用於對字串的定義

4.sparkline.c 乙個擁有sample列表的序列

5.t_hash.c hash在server/client中的應答操作。主要通過redisobject進行型別轉換。

6.t_list.c list在server/client中的應答操作。主要通過redisobject進行型別轉換。

7.t_set.c  set在server/client中的應答操作。主要通過redisobject進行型別轉換。

8.t_string.c string在server/client中的應答操作。主要通過redisobject進行型別轉換。

9.t_zset.c zset在server/client中的應答操作。主要通過redisobject進行型別轉換。

10.ziplist.c  ziplist是乙個類似於list的儲存物件。它的原理類似於zipmap。

11.zipmap.c  zipmap是乙個類似於hash的儲存物件。

tool:(工具)

1.bitops.c 位操作相關類

2.debug.c 用於除錯時使用

3.endianconv.c 高低位轉換,不同系統,高低位順序不同

4.help.h  輔助於命令的提示資訊

5.lzf_c.c 壓縮演算法系列

6.lzf_d.c  壓縮演算法系列

7.rand.c 用於產生隨機數

8.release.c 用於發步時使用

9.sha1.c sha加密演算法的實現

10.util.c  通用工具方法

11.crc64.c 迴圈冗餘校驗

event:(事件)

1.ae.c 用於redis的事件處理,包括控制代碼事件和超時事件。

2.ae_epoll.c 實現了epoll系統呼叫的介面

3.ae_evport.c 實現了evport系統呼叫的介面

4.ae_kqueue.c 實現了kqueuex系統呼叫的介面

5.ae_select.c 實現了select系統呼叫的介面

baseinfo:(基本資訊)

1.asciilogo,c redis的logo顯示

2.version.h定有redis的版本號

compatible:(相容)

1.fmacros.h 相容mac系統下的問題

2.solarisfixes.h 相容solary下的問題

main:(主程式)

1.redis.c redis服務端程式

2.redis_cli.c redis客戶端程式

net:(網路)

1.anet.c 作為server/client通訊的基礎封裝

2.networking.c 網路協議傳輸方法定義相關的都放在這個檔案裡面了。

others:(存放了一些我暫時還不是很清楚的類,所以沒有解釋了)

1.scripting.c

2.sentinel.c

2.setproctitle.c

3.valgrind.sh

4.redisassert.h

我分析的此redis源**是目前最新的**redis-2.8.17,確保是最新的,新加了crc64.c等這些在2.2左右的版本上根本沒有, 裡面的很多.h標頭檔案被我省掉了,因為很多同個檔名.h,.c檔案都是其實指的是同個功能,後續,我將會分模組式分析redis源**,工作的時候根本沒時間進行**級別的研究。抓緊時間啦,fighting!

Redis原始碼分析 intset h c

intset.h c 是redis 的整數set實現,intset的結構體如下 基本結構 typedef struct intset intset intset的第乙個成員encoding,表明contents中的儲存資料的資料長度,可以是16bits,32bits,64bits。第二個成員leng...

Redis原始碼分析系列

redis目前熱門nosql記憶體資料庫,量不是很大,本系列是本人閱讀redis原始碼時記錄的筆記,由於時間倉促和水平有限,文中難免會有錯誤之處,歡迎讀者指出,共同學習進步,本文使用的redis版本是2.8.19。redis之hash資料結構 redis之intset資料結構 redis之skipl...

redis原始碼分析 adlist

typedef struct listnode listnode 首先定義了乙個節點,包含前驅和後繼以及對應的value typedef struct listiter listiter list的迭代器,next指標和迭代方向 typedef struct list list 鍊錶內容 head和...