通過使用io多路複用技術實現的文件處理器,redis單線程單進程的方式來處理命令請求,並與多個客戶端進行網絡通信。
每個客戶端都有一個redisClient
結構,保存當前客戶端消息。
13.1 客戶端屬性
通用屬性與特定功能屬性。
13.1.1 套接字描述符
僞客戶端fd爲-1.
13.1.2 名字
在默認情況下,一個連接到服務器的客戶端是沒有名字的。
使用client setname
設置名字。
13.1.3 標誌
記錄角色以及所處狀態
13.1.4 輸入緩衝區
最大不能超過1GB否則會關閉
保存客戶端發送的命令請求
13.1.5 命令與命令參數
13.1.6 命令的實現函數
13.1.7 輸出緩衝區
服務端回覆的結果保存在此處
13.1.8 身份驗證
13.1.9 時間
13.2 客戶端的創建與關閉
13.2.2 關閉普通客戶端
13.2.3 Lua腳本的僞客戶端
13.2.4 AOF文件的僞客戶端
13.3 重點回顧
- 服務器狀態結構使用
clients
鏈表連接多個客戶端狀態,新添加的客戶端狀態會被放到鏈表末尾。 flags
屬性使用不同標誌來表明客戶端的角色以及所處狀態(阻塞、讀取、等待回覆等等)- 輸入緩衝區記錄了客戶端發送的命令請求、最大1GB
- 命令的參數和參數個數會被記錄argv和argc裏面。
- 固定大小緩衝區16KB最大和可變大小緩衝區
- 輸出緩衝區有兩種 一個是超出了硬性限制 like關閉,如果在一段時間內也超過軟性限制 也被關閉。
- 當客戶端連接上服務器時,會創建相應客戶端。
- 處理Lua腳本
- 載入AOF時會創建僞客戶端(走套接字)