現在就從伺服器啟動入口開始講
跟隨 readme.md 的腳步走,先看結構主要字段
/* redis伺服器 */
struct redisserver
/* redis客戶端 */
struct client
啟動邏輯主要呼叫下面幾個函式
* `initserverconfig()` 初始化伺服器預設值,載入命令表
* `loadserverconfig()` 根據引數設定伺服器配置
* `initserver()` 分配記憶體給server的各種字段,建立 eventloop, 建立tcp 流socket與unix 流socket,在需要時初始化集群等
* `aemain()` 開始處理 eventloop(事件處理),將在下一章專門講
下面兩函式會經常呼叫
1. `servercron()` 根據 `server.hz` 週期性呼叫, 做各種任務, 如檢查超時客戶端.
2. `beforesleep()` eventloop 處理事件前會呼叫,注意會呼叫 `
handleclientswithpendingwrites()`來傳送之前(基本是上次迴圈)留下的資料到客戶端
其他重要函式
* `call()` 呼叫redis命令
* `freememoryifneeded()` 在新的寫入命令時呼叫,並根據是否達到`maxmemory` 的記憶體溢位再作處理
* 全域性 `rediscommandtable` 字義了所有命令,會被處理後存進 `server.commands` 裡
呼叫 socket(), bind(), listen() 等函式
應用於客戶端、主從服(只是特殊的客戶端)等
下面是重要的函式
一些注意點
redis原始碼學習筆記
目錄 1 從資料結構開始 圖為原始碼,附帶個人簡單分析 a 動態字串 檔案 sds.h sds.c 前言 s sizeof struct sdshdr 的解釋為buf為柔性陣列,不占用空間,僅僅為偏移量,所以s指標向後退乙個結構體大小為結構體位址所在。分析 這個結構是整個動態字串的基礎,sds為 s...
redis原始碼學習 skiplist
圖中所示,跳躍表與普通鍊錶的區別在於,每乙個節點可以有多個後置節點,圖中是乙個4層的跳躍表 第0層 head 3 6 7 9 12 17 19 21 25 26 tail 第1層 head 6 9 17 25 tail 第2層 head 6 25 tail 第3層 head 6 tail 傳統意義的...
Redis 原始碼學習之 Redis 事務Nosql
redis事務提供了一種將多個命令請求打包,然後一次性 按照順序地執行多個命令的機制,並且在事務執行的期間,伺服器不會中斷事務而去執行其他不在事務中的命令請求,它會把事務中所有的命令都執行完畢才會去執行其他的命令。howredis中提供了multi discard exec watch unwatc...