Redis源碼分析(零)學習路徑筆記

文章目錄

    • 第一階段
    • 第二階段 熟悉Redis的內存編碼結構
    • 第三階段 熟悉Redis數據類型的實現
    • 第四階段 熟悉Redis數據庫的實現
    • 第五階段 熟悉客戶端和服務器端的代碼實現
    • 第六階段 這一階段主要是熟悉Redis多機部分的代碼實現
    • 關于測試方面的文件有
    • 一些工具類的文件如下
    • SORT命令的實現一些封裝類的代碼實現

第一階段

閱讀Redis的數據結構部分,基本位于如下文件中:

內容文件名
內存分配zmalloc.c和zmalloc.h
動態字符串sds.h和sds.c
雙端鏈表adlist.c和adlist.h
字典dict.h和dict.c
跳躍表server.h文件里面關于zskiplist結構和zskiplistNode結構,以及t_zset.c中所有zsl開頭的函數
基數統計hyperloglog.c 中的 hllhdr 結構, 以及所有以 hll 開頭的函數

第二階段 熟悉Redis的內存編碼結構

內容文件名
整數集合數據結構intset.h和intset.c
壓縮列表數據結構ziplist.h和ziplist.c

第三階段 熟悉Redis數據類型的實現

內容文件名
對象系統object.c
字符串鍵t_string.c
列表鍵t_list.c
散列鍵t_hash.c
集合鍵t_set.c
有序集合鍵t_zset.c中除 zsl 開頭的函數之外的所有函數
HyperLogLog鍵hyperloglog.c中所有以pf開頭的函數

第四階段 熟悉Redis數據庫的實現

內容文件名
數據庫實現redis.h文件中的redisDb結構,以及db.c文件
通知功能notify.c
RDB持久化rdb.c
AOF持久化aof.c
  • 獨立功能模塊的實現
    發布和訂閱 redis.h文件的pubsubPattern結構,以及pubsub.c文件
    事務 redis.h文件的multiState結構以及multiCmd結構,multi.c文件

第五階段 熟悉客戶端和服務器端的代碼實現

內容文件名
事件處理模塊ae.c/ae_epoll.c/ae_evport.c/ae_kqueue.c/ae_select.c
網路鏈接庫anet.c和networking.c
服務器端redis.c
客戶端redis-cli.c
  • 這個時候可以閱讀下面的獨立功能模塊的代碼實現

    內容文件名
    lua腳本scripting.c
    慢查詢slowlog.c
    監視monitor.c

第六階段 這一階段主要是熟悉Redis多機部分的代碼實現

內容文件名
復制功能replication.c
Redis Sentinelsentinel.c
集群cluster.c

關于測試方面的文件有

內容文件名
memtest.c內存檢測
redis_benchmark.c用于redis性能測試的實現
redis_check_aof.c用于更新日志檢查的實現
redis_check_dump.c用于本地數據庫檢查的實現
testhelp.c一個C風格的小型測試框架。

一些工具類的文件如下

內容文件名
bitops.cGETBIT、SETBIT 等二進制位操作命令的實現
debug.c用于調試時使用
endianconv.c高低位轉換,不同系統,高低位順序不同
help.h輔助于命令的提示信息
lzf_c.c壓縮算法系列
lzf_d.c壓縮算法系列
rand.c用于產生隨機數
release.c用于發布時使用
sha1.csha加密算法的實現
util.c通用工具方法
crc64.c循環冗余校驗
sort.c排序

SORT命令的實現一些封裝類的代碼實現

內容文件名
bio.cbackground I/O的意思,開啟后臺線程用的
latency.c延遲類
migrate.c命令遷移類,包括命令的還原遷移等
pqsort.c排序算法類
rio.credis定義的一個I/O類
syncio.c用于同步Socket和文件I/O操作

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382380.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Effective C++學習第十二天

條款47:請使用traits classes表現類型信息STL有五類迭代器分類,input迭代器(只讀,一次,向前)、output迭代器(可寫,一次,向前)、forward迭代器(讀/…

Redis源碼分析(一)redis.c //redis-server.c

Redis源碼分析(一)redis.c //redis-server.c 入口函數 int main() 4450 int main(int argc, char **argv) {4451 initServerConfig();4452 if (argc 2) {4453 ResetServerSaveParams();4454 loadServerConfig(argv[1]);4455 …

Linux 學習

1.linux文本命令行語言環境設置命令 查看當前語言環境: echo ¥LANG 修改: LANG選擇的語言環境’ 引申:https://blog.csdn.net/huoyunshen88/article/details/41113633 2.linux中的硬鏈接和軟連接 linux中文件的儲存方式&#xf…

vivo C/C++工程師視頻面試總結 20180802

1.自我介紹:有點兒緊張了,直接把自己簡歷上的一些信息信息說了一遍,說完之后在介紹了一下自己的平時的愛好和興趣,感覺面試官沒有理我,直接進入下一環節了。 2.項目詳情:主要是自己最近的一個項目和自己負…

Redis源碼分析(二)redis-cli.c

文章目錄1. int main()2. parseOptions(int argc, char **argv) 進行ip和port的改變3. lookupCommand(char *name) 查找命令,判斷命令合法3.2 strcasecmp(name,cmdTable[j].name)3.1 redisCommand cmdTable[]4. cliSendCommand(int argc, char **argv)4.1 cliConnec…

C語言中有bool變量嗎?

1.C/C中定義的數據類型: C語言中定義了6種基本數據類型:short,int,long,float,double,char 4種構造類型:數組,結構體(struct),共用類型(union),枚舉類型(enum) 指針類型和空類型 C語…

redis源碼剖析(三)——基礎數據結構

文章目錄SDS鏈表字典這篇文章關于 Redis 的基礎數據:SDS SDS (Simple Dynamic String)是 Redis 最基礎的數據結構。直譯過來就是”簡單的動態字符串“。Redis 自己實現了一個動態的字符串,而不是直接使用了 C 語言中的字符串。 sds 的數據結…

C++迭代器使用錯誤總結

指針和迭代器的區別: 迭代器: (1)迭代器不是指針,是類模板,表現的像指針。他只是模擬了指針的一些功能,通過重載了指針的一些操作符,->,*, --等封裝了指針,是一…

redis源碼剖析(四)跳表

文章目錄整數集合跳躍表壓縮列表總結整數集合 當一個集合只包含整數,且這個集合的元素不多的時候,Redis 就會使用整數集合 intset 。首先看 intset 的數據結構: typedef struct intset {// 編碼方式uint32_t encoding;// 集合包含的元素數量…

vivo C/C++工程師 HR視頻面試問題總結20180807

一開始沒想到這次視頻面是HR面試,還以為是技術面試,畢竟上次面試的時候技術問題問的相對比較少,所以面試準備方向有點兒錯了,不過還是總結一下具體問題。 1)自我介紹:吸取了上次自我介紹的經驗,…

在Redis客戶端設置連接密碼 并演示密碼登錄

我們先連接到Redis服務 然后 我們要輸入 CONFIG SET requirepass “新密碼” 例如 CONFIG SET requirepass "A15167"這樣 密碼就被設置成立 A15167 我們 輸入 AUTH 密碼 例如 AUTH A15167這里 返回OK說明成功了 然后 我們退出在登錄就真的需要 redis-cli -h IP地…

redis源碼剖析(五)—— 字符串,列表,哈希,集合,有序集合

文章目錄對象REDIS_STRING (字符串)REDIS_LIST 列表REDIS_SET (集合)REDIS_ZSET (有序集合)REDIS_HASH (hash表)int refcount(引用計數器)unsigned lru:REDIS_LRU_BITS對象 對于 Re…

函數sscanf小結

1.sscanf用于處理固定格式的字符串&#xff0c;包含在頭文件<cstdio>中&#xff0c;函數原型為&#xff1a; int sscanf(const char *buffer,const char*format,[]argument ]...); 其中:buffer代表著要存儲的數據&#xff0c;format 代表格式控制字符串&#xff0c;arg…

redis源碼剖析(六)—— Redis 數據庫、鍵過期的實現

文章目錄數據庫的實現數據庫讀寫操作鍵的過期實現數據庫的實現 我們先看代碼 server.h/redisServer struct redisServer{...//保存 db 的數組redisDb *db;//db 的數量int dbnum;... }再看redisDb的代碼&#xff1a; typedef struct redisDb {dict *dict; /*…

多益網絡 視頻面試面試總結20180816

1.首先是自我介紹&#xff1a;因為等了半個小時&#xff0c;所以有點兒緊張&#xff0c;只說了一下自己的學校&#xff0c;愛好和興趣&#xff1b; 2.介紹了一個自己的最成功的項目&#xff1a;我介紹了一個關于GPS導航的項目&#xff0c;介紹了項目的內容和項目的一些工作&am…

redis源碼剖析(七)—— Redis 數據結構dict.c

文章目錄dict.hdict.cdict.h //定義錯誤相關的碼 #define DICT_OK 0 #define DICT_ERR 1//實際存放數據的地方 typedef struct dictEntry {void *key;void *val;struct dictEntry *next; } dictEntry;//哈希表的定義 typedef struct dict {//指向實際的哈希表記錄(用數組開鏈的…

簡述linux中動態庫和靜態庫的制作調用流程

假設現在有這些文件&#xff1a;sub.c add.c div.c mul.c mainc head.h&#xff08;前4個.C文件的頭文件&#xff09; 1.靜態庫制作流程 gcc -c sub.c add.c div.c mul.c -->生成 .o目標文件文件 ar rcs libmycal.a *.o …

redis源碼剖析(八)—— 當你啟動Redis的時候,Redis做了什么

文章目錄啟動過程初始化server結構體main函數會調用initServer函數初始化服務器狀態載入持久化文件&#xff0c;還原數據庫開始監聽事件流程圖啟動過程 初始化server結構體從配置文件夾在加載參數初始化服務器載入持久化文件開始監聽事件 初始化server結構體 服務器的運行ID…

linux中錯誤總結歸納

1.使用gcc編譯C文件&#xff0c;C文件在for循環語句中出現變量定義 編譯器提示錯誤&#xff1a;“for”loop initial declarations are only allowed in C99 mode. note:use option -stdc99or-stdgnu99 to compile; 原因&#xff1a;gcc的標準是基于c89的&#xff0c;c89不能在…

redis源碼剖析(十一)—— Redis字符串相關函數實現

文章目錄初始化字符串字符串基本操作字符串拼接操作other獲取指定范圍里的字符串將字符串中的所有字符均轉為小寫的形式將字符串中所有字符均轉為大寫的形式字符串比較other#define SDS_ABORT_ON_OOM#include "sds.h" #include <stdio.h> #include <stdlib.…