Redis Pipeline 閱讀簡記

一、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連接中減少了“交互往返”的時間。
 

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