1. 程式人生 > 實用技巧 >Redis Pipeline

Redis Pipeline

Redis提供了批量操作命令(例如mget、 mset等) , 有效地節約RTT。 但大部分命令是不支援批量操作的, 例如要執行n次hgetall命令, 並沒有mhgetall命令存在, 需要消耗n次RTT。

Pipeline(流水線) 機制能改善上面這類問題, 它能將一組Redis命令進行組裝, 通過一次RTT傳輸給Redis, 再將這組Redis命令的執行結果按順序返回給客戶端。

Redis命令真正執行的時間通常在微秒級別, 所以才會有Redis效能瓶頸是網路這樣的說法。

效能

Pipeline執行速度一般比逐條執行要快。
客戶端和服務端的網路延時越大, Pipeline的效果越明顯。

使用Pipeline執行n條命令模型

原生批量命令與Pipeline對比

·原生批量命令是原子的, Pipeline是非原子的。
·原生批量命令是一個命令對應多個key, Pipeline支援多個命令。
·原生批量命令是Redis服務端支援實現的, 而Pipeline需要服務端和客戶端的共同實現。

最佳實踐

Pipeline雖然好用, 但是每次Pipeline組裝的命令個數不能沒有節制, 否則一次組裝Pipeline資料量過大, 一方面會增加客戶端的等待時間, 另一方面會造成一定的網路阻塞, 可以將一次包含大量命令的Pipeline拆分成多次較小的Pipeline來完成。

Pipeline只能操作一個Redis例項, 但是即使在分散式Redis場景中, 也可以作為批量操作的重要優化手段。