天天看點

帶有詳細注釋的 Redis 3.0 代碼 (github.com)



Redis 3.0 源碼注釋

這份注釋是我在創作新版《Redis 設計與實作》期間, 為了了解 Redis 的内部實作而制作的, 所有在書中有介紹的内容, 在源碼中都進行了相應的注釋。

在注釋的過程中, 除了少量空格和空行方面的調整外, 沒有對原始代碼進行任何其他改動, 最大程度地保證了代碼的“原汁原味”。

希望這份注釋源碼能給大家學習和了解 Redis 帶來一點幫助。

Have fun!

黃健宏(huangz)

2014 年 6 月 28 日

<a></a>

檔案

作用

<code>adlist.c</code> 、 <code>adlist.h</code>

雙端連結清單資料結構的實作。

<code>ae.c</code> 、 <code>ae.h</code> 、 <code>ae_epoll.c</code> 、 <code>ae_evport.c</code> 、

<code>ae_kqueue.c</code> 、 <code>ae_select.c</code>

事件處理器,以及各個具體實作。

<code>anet.c</code> 、 <code>anet.h</code>

Redis 的異步網絡架構,内容主要為對 socket 庫的包裝。

<code>aof.c</code>

AOF 功能的實作。

<code>asciilogo.h</code>

儲存了 Redis 的 ASCII LOGO 。

<code>bio.c</code> 、 <code>bio.h</code>

Redis 的背景 I/O 程式,用于将 I/O 操作放到子線程裡面執行, 減少 I/O 操作對主線程的阻塞。

<code>bitops.c</code>

二進制位操作指令的實作檔案。

<code>blocked.c</code>

用于實作 BLPOP 指令和 WAIT 指令的阻塞效果。

<code>cluster.c</code> 、 <code>cluster.h</code>

Redis 的叢集實作。

<code>config.c</code> 、 <code>config.h</code>

Redis 的配置管理實作,負責讀取并分析配置檔案, 然後根據這些配置修改 Redis 伺服器的各個選項。

<code>crc16.c</code> 、 <code>crc64.c</code> 、 <code>crc64.h</code>

計算 CRC 校驗和。

<code>db.c</code>

資料庫實作。

<code>debug.c</code>

調試實作。

<code>dict.c</code> 、 <code>dict.h</code>

字典資料結構的實作。

<code>endianconv.c</code> 、 <code>endianconv.h</code>

二進制的大端、小端轉換函數。

<code>fmacros.h</code>

一些移植性方面的宏。

<code>help.h</code>

<code>utils/generate-command-help.rb</code> 程式自動生成的指令幫助資訊。

<code>hyperloglog.c</code>

HyperLogLog 資料結構的實作。

<code>intset.c</code> 、 <code>intset.h</code>

整數集合資料結構的實作,用于優化 SET 類型。

<code>lzf_c.c</code> 、 <code>lzf_d.c</code> 、 <code>lzf.h</code> 、 <code>lzfP.h</code>

Redis 對字元串和 RDB 檔案進行壓縮時使用的 LZF 壓縮算法的實作。

<code>Makefile</code> 、 <code>Makefile.dep</code>

建構檔案。

<code>memtest.c</code>

記憶體測試。

<code>mkreleasehdr.sh</code>

用于生成釋出資訊的腳本。

<code>multi.c</code>

Redis 的事務實作。

<code>networking.c</code>

Redis 的用戶端網絡操作庫, 用于實作指令請求接收、發送指令回複等工作, 檔案中的函數大多為 write 、 read 、 close 等函數的包裝, 以及各種協定的分析和建構函數。

<code>notify.c</code>

Redis 的資料庫通知實作。

<code>object.c</code>

Redis 的對象系統實作。

<code>pqsort.c</code> 、 <code>pqsort.h</code>

快速排序(QuickSort)算法的實作。

<code>pubsub.c</code>

釋出與訂閱功能的實作。

<code>rand.c</code> 、 <code>rand.h</code>

僞随機數生成器。

<code>rdb.c</code> 、 <code>rdb.h</code>

RDB 持久化功能的實作。

<code>redisassert.h</code>

Redis 自建的斷言系統。

<code>redis-benchmark.c</code>

Redis 的性能測試程式。

<code>redis.c</code>

負責伺服器的啟動、維護和關閉等事項。

<code>redis-check-aof.c</code> 、 <code>redis-check-dump.c</code>

RDB 檔案和 AOF 檔案的合法性檢查程式。

<code>redis-cli.c</code>

Redis 用戶端的實作。

<code>redis.h</code>

Redis 的主要頭檔案,記錄了 Redis 中的大部分資料結構, 包括伺服器狀态和用戶端狀态。

<code>redis-trib.rb</code>

Redis 叢集的管理程式。

<code>release.c</code> 、 <code>release.h</code>

記錄和生成 Redis 的釋出版本資訊。

<code>replication.c</code>

複制功能的實作。

<code>rio.c</code> 、 <code>rio.h</code>

Redis 對檔案 I/O 函數的包裝, 在普通 I/O 函數的基礎上增加了顯式緩存、以及計算校驗和等功能。

<code>scripting.c</code>

腳本功能的實作。

<code>sds.c</code> 、 <code>sds.h</code>

SDS 資料結構的實作,SDS 為 Redis 的預設字元串表示。

<code>sentinel.c</code>

Redis Sentinel 的實作。

<code>setproctitle.c</code>

程序環境設定函數。

<code>sha1.c</code> 、 <code>sha1.h</code>

SHA1 校驗和計算函數。

<code>slowlog.c</code> 、 <code>slowlog.h</code>

慢查詢功能的實作。

<code>solarisfixes.h</code>

針對 Solaris 系統的更新檔。

<code>sort.c</code>

SORT 指令的實作。

<code>syncio.c</code>

同步 I/O 操作。

<code>testhelp.h</code>

測試輔助宏。

<code>t_hash.c</code> 、 <code>t_list.c</code> 、 <code>t_set.c</code> 、 <code>t_string.c</code> 、 <code>t_zset.c</code>

定義了 Redis 的各種資料類型,以及這些資料類型的指令。

<code>util.c</code> 、 <code>util.h</code>

各種輔助函數。

<code>valgrind.sup</code>

valgrind 的suppression檔案。

<code>version.h</code>

記錄了 Redis 的版本号。

<code>ziplist.c</code> 、 <code>ziplist.h</code>

ZIPLIST 資料結構的實作,用于優化 LIST 類型。

<code>zipmap.c</code> 、 <code>zipmap.h</code>

ZIPMAP 資料結構的實作,在 Redis 2.6 以前用與優化 HASH 類型, Redis 2.6 開始已經廢棄。

<code>zmalloc.c</code> 、 <code>zmalloc.h</code>

記憶體管理程式。