通過使用由I/O多路複用技術實現的文件事件處理器,Redis服務器使用單線程單進程的方式來處理命令請求,並與多個客戶端進行網絡通信。
redisClient結構保存客戶端的數據結構:
- 套接字描述符
- 名字
- 標誌位
- 正在使用的數據庫指針,數據庫號碼
- 當前要執行的命令、參數、參數個數,以及指向命令實現函數的指針
- 輸入緩衝和輸出緩衝
- 複製狀態信息和複製所需數據結構
- 執行BRPOP、BLPOP等列表阻塞命令時使用的數據結構
- 事物狀態,執行WATCH命令用到的數據結構
- 執行發佈和訂閱用到的數據結構
- 身份驗證標誌
- 創建時間、最後一次通信時間,輸出緩衝區大小超出軟性限制的事件
- 客戶端狀態fd屬性記錄正在使用的套接字描述符,僞客戶端(來源於AOF文件或Lua腳本)的fd屬性值爲-1,普通客戶端值爲大於-1的整數。
- 一般情況,客戶端是沒有名字的,可以使用 CLIENT setname 命令爲客戶端設置名字。
- 標誌可以是單個標誌也可以是多個標誌的二進制,記錄客戶端的角色和當前狀態。