一、Pipeline相關概念簡介
概念1、Round Trip Time(RTT-往返時間):
Redis客戶端執行一條命令分爲如下四個過程:
(1)發送命令、(2)命令排隊、(3)命令執行、(4)返回結果
其中(1)+(4)稱爲Round Trip Time
概念2、Redis批量操作命令:
Redis提供了批量操作命令(例如mget、mset等),有效地節約RTT。但大部分
命令是不支持批量操作的,例如要執行n次hgetall命令,並沒有mhgetall命令存在,需要消耗n次RTT
概念3、Pipeline(流水線)機制:
它能將一組Redis命令進行組裝,通過一次RTT傳輸給Redis服務端,再將這組Redis命令的執行結果按順序
返回給客戶端。
二、原生批量命令與Pipeline的對比
原生批量命令是原子的,Pipeline是非原子的。
原生批量命令是一個命令對應多個key,Pipeline支持多個命令。
原生批量命令是Redis服務端支持實現的,而Pipeline需要服務端和客戶端的共同實現。
三、Pipeline的侷限性
1、一次Pipeline只能操作一個Redis實例,即Pipeline操作的key必須分佈在同一個Redis Node上
(集羣部署時需要注意,必要時需要添加hash_tag解決)
2、每次Pipeline組裝的命令個數不能沒有節制,否則一次組裝Pipeline數據量過大,
一方面會增加客戶端的等待時間,另一方面會造成一定的網絡阻塞。
具體一次Pipeline合適的操作命令個數與返回的數據大小(佔用Socket緩衝區)有較大關係,受限於server的物理內存或網絡接口的緩衝能力。
四、Pipeline的推薦使用場景:
Pipeline在某些場景下非常有用,比如有多個command需要被“及時的”提交,而且他們對“相應結果沒有互相依賴”,
對“結果響應”也無需立即獲得,那麼pipeline就可以充當這種“批處理”的工具;
而且在一定程度上,可以較大的提升性能,性能提升的原因主要是TCP連接中減少了“交互往返”的時間。