Redis - pipeline 簡介

Redis client 每次發送一筆 command 都會經過 發送命令> 命令列隊(排隊)> 執行 > 返回結果 ,這期間所需要的時間,就稱為RTT(Round Trip Time, 往返時間)

Redis 通常可以執行在微秒等級,但是在不同網路環境,就會因網路本身的傳輸限制而有所差異,因此才有Redis 性能瓶頸就是網路 一說

pipeline 可以將多筆資料同時發送出去,

如果不使用 pipelining,每一個command 從訪問資料結構、取得回覆,看起來耗費的流量都非常小,

但對於 socket I/O 而言,每個訪問都執行一次comman,占用的效能成本就相當大

當使用 pipelining,可以將多個指令組成一次發送出去,讓系統只需讀取一次 read(),並且將多個回覆內容也組成一次輸出 write()

雖然 pipeline 可以減少 RTT,減少IO調用次數

但是直接發送 command 只需要 Redis server 端處理,

透過 pipeline 則需要 server 端-client端 共同實現

因此仍須注意 pipeline 大小,是否會超過 Client端的緩存限制,若超過則緩存刷新或直接發送,可能會發生無法預期的問題

通常對於過大的 pipeline ,可以透過拆分來完成減少單次大小

Pipeline 代理

通常為了讓Redis可以有更好的負載能力,都會在 Redis 前面外加一個代理,例如: Codis Pipeline 緩存默認10K,3.1則是1024,Jedis 緩存默認為 8192