深入理解Redis 伺服器啟動過程

2021-10-06 15:46:21 字數 1335 閱讀 4602

一台redis伺服器從啟動到能夠接收客戶端的命令請求,需要經過一系列的初始化和設定過程,大致需要經過以下幾步。

伺服器狀態結構的初始化會建立乙個struct rdisserver型別的例項變數server作為伺服器的狀態,同時為結構中的其他屬性設定預設值。由redis.c/initserverconfig函式來初始化server變數。initserverconfig 函式的主要任務是設定伺服器的執行id、預設執行頻率、預設配置檔案路徑、執行架構、預設埠、預設rdb持久化條件和aof持久化條件及初始化lru時鐘,同時建立命令表,為伺服器的後續執行做好準備。initserverconfig 函式設定的伺服器屬性都是最基本的,這些屬性的值都是一些整數、 浮點數或字串值。該函式除建立命令表之外,並不會建立其他,比如,它不會建立資料庫。

在伺服器的initserverconfig函式完成server變數的初始化後,就會開始載入配置引數,同時根據使用者指定的配置引數,對server變數的屬性進行修改。比如,我們在啟動redis伺服器之前,修改redis.conf配置檔案,修改的內容如下:

#修改資料庫的預設數量為20個

databases 20

#關閉rdb檔案的壓縮功能

rdbcompression no

修改完配置檔案之後,啟動伺服器,伺服器中的資料庫數量就會變為20個,同時rdb持久化壓縮功能就會被關閉。

在載入完相關配置引數之後,伺服器會呼叫initserver函式為以下伺服器資料結構分配記憶體及設定初始化值。

伺服器在初始化的過程中,分別呼叫了initserverconfig 和initserver 函式,其中,initserverconfig函式主要用於初始化一些基本屬性,initserver 函式主要用於初始化一些資料結構。在初始化的過程中,要考慮到使用者的輸入情況,所以伺服器必須先載入使用者輸入的配置資訊,再按照使用者的意願來初始化相關的資料結構。而如果在執行initserverconfig函式時就對資料結構進行初始化,此時使用者恰好修改了和資料結構有關的伺服器狀態屬性,那麼伺服器又要重新修改已建立的資料結構,為了避免此類情況的發生,伺服器將初始化過程拆分為兩步。

伺服器的initserver函式除初始化資料結構之外,還執行以下相關操作。

當initserver函式執行完這些操作後,伺服器將採用ascii字元在日誌中列印出redis圖示,以及redis版本號、埠號等資訊。

伺服器在完成資料庫狀態還原之後,就會列印出載入目標檔案及還原資料庫狀態所用的時間。

至此,表示伺服器已經成功啟動了,它將開始執行伺服器的迴圈事件,並開始接收客戶端的命令請求。

深入理解全域性編錄伺服器GC

在win2003ad域環境中,除了fsmo操作主機角色外,全域性編錄伺服器 gc 也是有著特殊含義的網域控制器。通過gc,可以提高在活動目錄中搜尋物件的速度,可以加快使用者登入驗證等。簡單的說,gc是森林中所有物件的唯讀調整緩衝記憶體 read only cache 目錄只用於搜尋。gc伺服器儲存本...

深入理解 Oracle 啟動原理

當oracle啟動時,初始化引數檔案的載入順序為 spfilesid.ora spfile.ora initsid.ora 資料庫處於shutdown狀態 資料庫處於停止狀態。不能接受外界資料請求。使用作業系統命令ps ef grep ora看不到任何資料庫程序的存在,啟動指令碼問dbstart 資...

深入理解Redis概念 精

redis 是nosql key value 可持久化,分布式,記憶體,快取的非關係型資料庫 有人問你什麼是redis你就上面這句話,詳細解釋分為四部分解釋 nosql key value 非關係型資料庫 nosql not only structured query language 不僅僅是支援...