redis原始碼 (九)Redis

2022-02-23 15:26:31 字數 999 閱讀 4733

前些天主要看了redis底層依賴的一些資料結構和事件管理庫的**,比較零散,但大體上了解了作者的設計思路.

對不同規模【n】的資料採用不同的資料結構以實現對記憶體利用的"最優",這裡的最優我想作者也沒有做過嚴格的實驗,不同的應用場景在redis上的表現肯定有所不同,如果有必要,可以再配置檔案中對一些閾值做調整,比如 hash-max-zipmap-entries和 hash-max-zipmap-value,這兩個引數決定了在一定資料規模的時候,是用zipmap作為雜湊表資料結構還是dict。

好了,開始介紹redis在沒有異常的情況下預設的整個工作流程,從main函式開始:

1. 初始化serverconfig

初始化redisserver的成員為預設值,如預設埠號,db數量,是否是守護程序,初始化server.commands

2. 讀配置檔案

從引數中指定的配置檔案一行行獲取配置資訊,配置檔案最大為1024行~

3. 設定守護程序

讀取完配置後,如果配置中的daemonize為1,則設定redis為守護程序【弒父認1為父】

4. 執行initserver

a. 初始化對某些訊號的處理方式

b. 註冊三類事件到ae:

分別是定時事件,執行servercron, 列印redis各個db的狀態資訊,試探得進行rehashing擴容,關閉超時的client, 刪除過期的key【if master】,連線master【if client,%10】,修改cron計數資訊,返回下次迴圈的時間,

埠監聽事件,accepttcphandler,當前來連線的fd可讀時,讀query並進行處理

unix埠監聽事件,acceptunixhandler

5. 設定ae時間管理每乙個loop前要執行的方法 beforesleep

6.開始進入時間管理

Redis原始碼研究 Redis的RESP協議

redis客戶端和服務端互動使用的是redis作者制定的乙個協議,叫resp redis serialization protocol 具體分如下幾個層次 客戶端發給服務端的命令都會序列化為array,而服務端返回給客戶端的可以為如上任意一種型別,各簡單舉例如下 具體介紹參考 請求響應模式有兩種特殊...

Redis 原始碼學習之 Redis 事務Nosql

redis事務提供了一種將多個命令請求打包,然後一次性 按照順序地執行多個命令的機制,並且在事務執行的期間,伺服器不會中斷事務而去執行其他不在事務中的命令請求,它會把事務中所有的命令都執行完畢才會去執行其他的命令。howredis中提供了multi discard exec watch unwatc...

Redis原始碼分析 intset h c

intset.h c 是redis 的整數set實現,intset的結構體如下 基本結構 typedef struct intset intset intset的第乙個成員encoding,表明contents中的儲存資料的資料長度,可以是16bits,32bits,64bits。第二個成員leng...