Redis之Pipeline(管道)

1、Pipeline定義

管道(pipeline)可以一次性發送多條命令並在執行完後一次性將結果返回,pipeline 通過減少客戶端與 redis 的通信次數來實現降低往返延時時間,而且 Pipeline 實現的原理是隊列,而隊列的原理是時先進先出,這樣就保證數據的順序性。 Pipeline 的默認的同步的個數爲53個,也就是說 arges 中累加到53條數據時會把數據提交。其過程如下圖所示:client 可以將三個命令放到一個 tcp 報文一起發送,server 則可以將三條命令的處理結果放到一個 tcp 報文返回。
 

需要注意到是用 pipeline 方式打包命令發送,redis 必須在處理完所有命令前先緩存起所有命令的處理結果。打包的命令越多,緩存消耗內存也越多。所以並不是打包的命令越多越好。具體多少合適需要根據具體情況測試。

2、性能比較測試

3、適用場景
  有些系統可能對可靠性要求很高,每次操作都需要立馬知道這次操作是否成功,是否數據已經寫進 redis 了,那這種場景就不適合。

  還有的系統,可能是批量的將數據寫入 redis,允許一定比例的寫入失敗,那麼這種場景就可以使用了,比如10000條一下進入 redis,可能失敗了2條無所謂,後期有補償機制就行了,比如短信羣發這種場景,如果一下羣發10000條,按照第一種模式去實現,那這個請求過來,要很久才能給客戶端響應,這個延遲就太長了,如果客戶端請求設置了超時時間5秒,那肯定就拋出異常了,而且本身羣發短信要求實時性也沒那麼高,這時候用 pipeline 最好了。
 

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