Redis源碼分析(一)--Redis結構解析

來源:互聯網
上載者:User

標籤:記憶體資料庫   源碼   原始碼   架構   

           從今天起,本人將會展開對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的儲存物件。


data:(資料操作)
1.aof.c 全稱為append only file,作用就是記錄每次的寫操作,在遇到斷電等問題時可以用它來恢複資料庫狀態。
2.config.c 用於將設定檔redis.conf檔案中的配置讀取出來的屬性通過程式放到server對象中。
3.db.c對於Redis記憶體資料庫的相關操作。
4.multi.c用於交易處理操作。
5.rdb.c  對於Redis本機資料庫的相關操作,預設檔案是dump.rdb(通過設定檔獲得),包括的操作包括儲存,移除,查詢等等。
6.replication.c 用於主從資料庫的複製操作的實現。


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 網路通訊協定傳輸方法定義相關的都放在這個檔案裡面了。


wrapper:(封裝類)
1.bio.c background I/O的意思,開啟後台線程用的
2.hyperloglog.c 一種日誌類型的
3.intset.c  整數範圍內的使用set,並包含相關set操作。
4.latency.c 延遲類
5.migrate.c 命令遷移類,包括命令的還原遷移等
6.notify.c 通知類
7.object.c  用於建立和釋放redisObject對象
8.pqsort.c  排序演算法類
9.pubsub.c 用於訂閱模式的實現,有點類似於Client廣播發送的方式。
10.rio.c redis定義的一個I/O類
11.slowlog.c 一種日誌類型的,與hyperloglog.c類似
12.sort.c 排序演算法類,與pqsort.c使用的情境不同
13.syncio.c 用於同步Socket和檔案I/O操作。
14.zmalloc.c 關於Redis的記憶體配置的封裝實現


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源碼分析(一)--Redis結構解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.