1. 程式人生 > 資料庫 >Redis為何那麼快-----底層原理淺析

Redis為何那麼快-----底層原理淺析

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中執行的過程

總結一下效率高的原因

  1. 記憶體操作
  2. IO多路複用機制,減少了阻塞
  3. 單執行緒避免了執行緒切換的開銷和競爭問題
  4. 最最根本的redis是用C語言寫的,本來就直接跟作業系統互動,命令執行快得飛起