Redis客戶端 從發送命令到回覆的過程

1.發送命令

當我們在客戶端輸入命令時,客戶端會將命令轉換協議格式

2.讀取命令

服務器收到後,將命令請求保存到客戶端狀態的輸入緩衝區,客戶端狀態是保存狀態信息的,比如客戶端連接時間、是否授權、輸入緩存區等等。

完成輸入後,對輸入緩存區進行分析,保存到客戶端狀態的argv、argc屬性當中,其實就是把輸入緩存區進行詞法分析。

3.查找命令

客戶端狀態argv是數組,argv[0]保存的是redis的命令,如set。服務器根據set去命令表當中找到set所指向的函數。命令表的結構就是key 是命令 value是該命令指向的函數、命令有多少參數等修飾這個命令的信息。

4.執行預備操作

進行各種檢查,如

1.上一步找到命令指向的函數是不是爲null,

2.參數的個數對不對

3.客戶端是不是通過了身份驗證,其實就是檢查一個客戶端狀態中某個值

等等

5.調用命令的實現函數

調用函數,將函數的返回值放到客戶端狀態的buf中

6.執行後續工作

1.如果開啓慢查詢,根據執行的時間來判斷是否要寫入

2.更新客戶端狀態信息,如最後一次命令執行的時間,執行命令數量等

3.如果開啓了AOF,就寫入AOF緩存區

7.命令發送給客戶端

前面已經把回覆放到客戶端的輸出緩衝區了,併爲客戶端套接字關聯命令回覆處理器。

但客戶端的套接字變爲可寫狀態時,命令處理器就會發送命令。

這裏說一下,什麼套接字變爲可寫狀態。客戶端準備好要讀取時,就會把套接字變成可寫狀態,服務器把內容寫入套接字,客戶端就能讀取到。我們可以把套接字理解爲文件。

 8.客戶端接收

客戶端把接收到的內容轉換格式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章