Redis 服務器 單機數據庫的實現

Redis命令請求的執行過程:


1.發送命令請求

客戶端將命令請求轉換成協議格式,通過連接到服務器的套接字發送給服務器。


2.讀取命令請求

1)讀取套接字協議格式的請求,保存到客戶端狀態的緩衝輸入區。
2)分析緩衝區命令,提取命令參數及個數,分別保存到客戶端狀態的argv屬性和argc屬性。
3)調用命令執行器。

3.命令執行器

1)查找實現命令:根據客戶端狀態的argv[0]參數,查找參數指定的命令,保存到客戶端狀態的cmd屬性。

2)執行預備操作:檢查客戶端cmd屬性指向、參數個數、身份驗證是否合法等等一系列服務器和客戶端狀態的校驗。

3)調用命令的實現函數:函數調用產生setCommand(client)將產生一個 "+OK\r\n" 回覆,保存到客戶端的buf屬性。

4)執行後續工作:根據配置執行相應操作,例如慢查詢日誌、AOF持久化、主從服務。


4.將命令回覆發送給客戶端:將協議格式的命令回覆 +“OK\r\n”發送給客戶端。

5.客戶端接收並打印命令回覆:將協議回覆的 “OK\r\n” 轉換成 “OK\n” 打印給用戶。



Redis服務器中serverCron函數每隔100ms執行一次,該函數負責管理服務器資源並保持服務器良好運轉。

  1. 更新服務器時間緩存
  2. 更新LRU時鐘
  3. 更新服務器每秒執行命令次數
  4. 更新服務器內存峯值記錄
  5. 處理SIGTERM信號
  6. 管理客戶端資源
  7. 管理數據庫資源
  8. 執行被延遲的BGREWRITEAOF
  9. 檢查持久化操作的運行狀態
  10. 將AOP緩衝區內容寫入AOF文件
  11. 關閉異步客戶端
  12. 增加cronloops計數器的值



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