redis原始碼學習3 啟動 配置及socket

2021-08-14 14:43:35 字數 904 閱讀 9339

現在就從伺服器啟動入口開始講

跟隨 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...