1. 準(zhǔn)備運(yùn)行環(huán)境
* 設(shè)置oom handler,zmalloc分配內(nèi)存失敗時(shí)調(diào)用
* 初始化隨機(jī)種子,用于生成隨機(jī)數(shù)
* 將server參數(shù)初始化為默認(rèn)值
* 創(chuàng)建命令與處理函數(shù)的映射表
2. 解析命令行參數(shù)、loadServerConfig()解析配置文件
* 配置文件會(huì)覆蓋命令行指定的參數(shù)
* 無(wú)效的配置項(xiàng)或者不合理的配置值會(huì)導(dǎo)致redis無(wú)法正常啟動(dòng)
3. initServer()初始化服務(wù)
* 安裝信號(hào)處理函數(shù)
* 創(chuàng)建共享對(duì)象,redis預(yù)分配好常用的對(duì)象用于共享,以節(jié)省內(nèi)存
* 根據(jù)maxc lients配置調(diào)整max open files
* 創(chuàng)建全局db字典,每個(gè)db對(duì)應(yīng)一個(gè)dict
* 監(jiān)聽(tīng)網(wǎng)絡(luò)端口,安裝事件處理器
* 如果開(kāi)啟了aof,打開(kāi)aof文件
* 創(chuàng)建serverCron定時(shí)器
4. loadDataFromDisk()從rdb或aof文件加載數(shù)據(jù)
* load數(shù)據(jù)出錯(cuò)(比如文件格式亂掉)等會(huì)導(dǎo)致redis不能正常啟動(dòng)
* loading的過(guò)程中,redis仍能處理請(qǐng)求,但大部分請(qǐng)求都會(huì)回復(fù)-LOADING錯(cuò)誤
5. aeMain()開(kāi)始事件循環(huán),接收客戶端請(qǐng)求
監(jiān)聽(tīng)文件描述符的事件處理函數(shù)初始化為acceptTcpHandler,新建立的連接的事件處理函數(shù)設(shè)置為readQueryFromClient,readQueryFromClient從網(wǎng)絡(luò)連接上讀取請(qǐng)求,解析出請(qǐng)求參數(shù)并處理。
更多信息請(qǐng)查看IT技術(shù)專欄