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>
記憶體管理程式。