通過原理理解爲什麼Redis的pipeline可以有效提升性能

Redis命令執行的過程

關於Redis服務如何處理每條指令已經有相關文章了,可以移步去看,這裏只討論命令發送之後的流程:

  1. 客戶端進程調用write操作將數據寫到本地操作系統內核的發送緩衝中
  2. 客戶端操作系統內核異步將數據發送到服務端機器
  3. Redis服務端將數據從本地操作系統內核的接收緩衝中取出
  4. 執行Redis命令
  5. 服務端進程調用write操作將數據寫到本地操作系統內核的發送緩衝中
  6. 服務端操作系統內核異步將數據發送到客戶端機器
  7. 客戶端將數據從本地操作系統內核的接收緩衝中取出

上面過程中會有2個耗時點:

  • 當客戶端將命令發出後,假如客戶端和服務端所在服務器相距很遠,那麼一次RTT(Round-Trip Time: 往返時延)將會達到毫秒級別,這將嚴重影響Redis的吞吐量
  • 無論是服務端進程還是客戶端進程,調用write操作將數據寫到本地操作系統內核的發送緩衝中時,如果發送緩衝滿了,就需要等待緩衝空出空閒空間來,這個就是寫操作IO操作的真正耗時。

PIPELINE原理

  1. 將多個命令打包組成命令塊
  2. 將命令塊一次性批量發送給服務端
  3. 服務端依此處理完後將結果集打包
  4. 批量返回所有結果

上面命令只有一次網絡往返時延和兩次網絡IO,所以可以有效提升性能

 

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