Redis為何那麼快-----底層原理淺析
阿新 • • 發佈:2021-01-20
Redis的快速很多人都知道是因為基於記憶體,但這只是一方面,其實redis在底層是一套很完善的多路複用事件處理機制來保證執行的高效的
執行緒模型
redis內部使用檔案事件處理器file event handler,它包含如下幾個部分
-
多個socket
-
IO多路複用程式
-
檔案事件分派器
-
事件處理器(連線應答處理器,命令請求處理器,命令回覆處理器)
之所以說redis是單執行緒其實是指這個檔案事件處理器是單執行緒的,它採用多路複用的方式監聽系統上多個socket,將socket上產生的事件壓入佇列中,由檔案事件分派器從佇列中取出一個socket根據事件型別發給相應的事件處理器
整個處理過程如圖:
處理過程可以分為以下幾個步驟:
- 客戶端向redis發起一個socket請求,向redis的server socket請求連線,這裡命名為socket01
- server socket產生一個AE_READABLE事件,IO多路複用程式監聽到事件後將這個socket01壓入佇列
- 檔案事件分派器從佇列中取出socket01,交給連線應答處理器
- 連線應答處理器會將socket01的AE_READABLE事件與命令請求處理器相關聯
- 假設客戶端執行set操作,這時命令請求處理器會從socket01讀取key value,在記憶體中完成key value的設定
- 在記憶體中完成設定後,會將socket01的AE_WRITEABLE事件與命令回覆處理器相關聯,然後壓入佇列中
- 事件分派器拿到socket01後,交給命令回覆處理器,由命令回覆處理器向socket01寫入本次操作的結果,比如OK,之後解除關聯
以上就是一個命令在redis中執行的過程
總結一下效率高的原因
- 記憶體操作
- IO多路複用機制,減少了阻塞
- 單執行緒避免了執行緒切換的開銷和競爭問題
- 最最根本的redis是用C語言寫的,本來就直接跟作業系統互動,命令執行快得飛起