我閱讀的源碼版本是redis-2.8.19redis
src目錄下總共96個.h,.c文件數據庫
1. 數據結構相關源碼(15個左右)
字符串代碼: sds.h, sds.c
字典:dict.h, dict.c
鏈表: adlist.h, adlist.c
跳躍表: redis.h/zskiplistNode, redis.h/zskiplis
整數集合: intset.h, intset.c
壓縮列表:ziplist.h, ziplist.c
redisObject: redis.h/redisObject, object.c
2. 單機數據庫
數據庫對象: redis.h/redisServer, redis.h/redisDb, redis.h/redisClient
rdb持久化: rdb.c/rdbSave, rdb.c/rdbLoad
rdb文件格式: od -c dump.rdb
aof持久化: redis.h/redisServer.aof_buf
文件事件: Reactor模型, 包含(socket, epoll, 文件事件分派器,文件事件處理器)
文件事件源碼: ae.h,ae_epoll.c, ae_kqueue.c, ae_select.c
ae.c/aeCreateFileEvent
ae.c/aeDeleteFileEvent
ae.c/aeGetFileEvent
ae.c/aeWait
ae.c/aeApiPoll
ae.c/aeProcessEvents
ae.c/aeGetApiName
文件事件處理器: networking.c/acceptTcpHander, networking.c/readQueryFromClent, networking.c/sendReplyToClient
時間事件
ae.c/aeCreateTimeEvent
ae.c/aeDeleteTimeEvent
ae.c/aeSearchNearestTimer
ae.c/aeProcessTimeEvent
客戶端:redis.h/redisClient
服務器: serverCron
3. 多機數據庫
複製: 舊版的實現,先sync,在命令傳播
複製: 新版的實現,先sync,在命令傳播,若是斷線,執行psync
Sentinel:
集羣:
服務器