当前位置:网站首页>Redis入門完整教程:Pipeline
Redis入門完整教程:Pipeline
2022-07-04 22:52:00 【穀哥學術】
3.3.1 Pipeline概念
Redis客戶端執行一條命令分為如下四個過程:
1)發送命令
2)命令排隊
3)命令執行
4)返回結果
其中1)+4)稱為Round Trip Time(RTT,往返時間)。
Redis提供了批量操作命令(例如mget、mset等),有效地節約RTT。但
大部分命令是不支持批量操作的,例如要執行n次hgetall命令,並沒有
mhgetall命令存在,需要消耗n次RTT。Redis的客戶端和服務端可能部署在不
同的機器上。例如客戶端在北京,Redis服務端在上海,兩地直線距離約為
1300公裏,那麼1次RTT時間=1300×2/(300000×2/3)=13毫秒(光在真空中
傳輸速度為每秒30萬公裏,這裏假設光纖為光速的2/3),那麼客戶端在1秒
內大約只能執行80次左右的命令,這個和Redis的高並發高吞吐特性背道而
馳。
Pipeline(流水線)機制能改善上面這類問題,它能將一組Redis命令進
行組裝,通過一次RTT傳輸給Redis,再將這組Redis命令的執行結果按順序
返回給客戶端,圖3-5為沒有使用Pipeline執行了n條命令,整個過程需要n次
RTT。
圖3-6為使用Pipeline執行了n次命令,整個過程需要1次RTT。
Pipeline並不是什麼新的技術或機制,很多技術上都使用過。而且RTT
在不同網絡環境下會有不同,例如同機房和同機器會比較快,跨機房跨地區
會比較慢。Redis命令真正執行的時間通常在微秒級別,所以才會有Redis性
能瓶頸是網絡這樣的說法。
redis-cli的--pipe選項實際上就是使用Pipeline機制,例如下面操作將set
hello world和incr counter兩條命令組裝:
echo -en '*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n*2\r\n$4\r\nincr\r\
n$7\r\ncounter\r\n' | redis-cli --pipe
但大部分開發人員更傾向於使用高級語言客戶端中的Pipeline,目前大
部分Redis客戶端都支持Pipeline,第4章我們將介紹如何通過Java的Redis客
戶端Jedis使用Pipeline功能。
3.3.2 性能測試
錶3-1給出了在不同網絡環境下非Pipeline和Pipeline執行10000次set操作
的效果,可以得到如下兩個結論:
·Pipeline執行速度一般比逐條執行要快。
·客戶端和服務端的網絡延時越大,Pipeline的效果越明顯。
因測試環境不同可能得到的具體數字不盡相同,本測試Pipeline每次攜
帶100條命令。
3.3.3 原生批量命令與Pipeline對比
可以使用Pipeline模擬出批量操作的效果,但是在使用時要注意它與原
生批量命令的區別,具體包含以下幾點:
·原生批量命令是原子的,Pipeline是非原子的。
·原生批量命令是一個命令對應多個key,Pipeline支持多個命令。
·原生批量命令是Redis服務端支持實現的,而Pipeline需要服務端和客戶
端的共同實現。
3.3.4 最佳實踐
Pipeline雖然好用,但是每次Pipeline組裝的命令個數不能沒有節制,否
則一次組裝Pipeline數據量過大,一方面會增加客戶端的等待時間,另一方
面會造成一定的網絡阻塞,可以將一次包含大量命令的Pipeline拆分成多次
較小的Pipeline來完成。
Pipeline只能操作一個Redis實例,但是即使在分布式Redis場景中,也可
以作為批量操作的重要優化手段,具體細節見第11章。
边栏推荐
- Redis入门完整教程:有序集合详解
- It is said that software testing is very simple, but why are there so many dissuasions?
- LOGO特训营 第五节 字体结构与设计常用技法
- MD5 tool class
- 攻防世界 MISC 进阶 glance-50
- 繁華落盡、物是人非:個人站長該何去何從
- Li Kou 98: verify binary search tree
- [machine learning] handwritten digit recognition
- LOGO特訓營 第一節 鑒別Logo與Logo設計思路
- leetcode 72. Edit Distance 编辑距离(中等)
猜你喜欢
攻防世界 MISC 进阶 glance-50
Redis入门完整教程:发布订阅
Attack and defense world misc master advanced zone 001 normal_ png
Attack and defense world misc advanced area ditf
Naacl-22 | introduce the setting of migration learning on the prompt based text generation task
Persistence mechanism of redis
2022-07-04: what is the output of the following go language code? A:true; B:false; C: Compilation error. package main import “fmt“ func main() { fmt.Pri
SPSS安装激活教程(包含网盘链接)
集群的概述与定义,一看就会
Redis入门完整教程:Bitmaps
随机推荐
Google Earth engine (GEE) - globfire daily fire data set based on mcd64a1
Wake up day, how do I step by step towards the road of software testing
[machine learning] handwritten digit recognition
2022-07-04: what is the output of the following go language code? A:true; B:false; C: Compilation error. package main import “fmt“ func main() { fmt.Pri
攻防世界 misc 高手进阶区 a_good_idea
攻防世界 misc 进阶区 2017_Dating_in_Singapore
攻防世界 MISC 高手进阶区 001 normal_png
[cooking record] - stir fried 1000 pieces of green pepper
NFT insider 64: e-commerce giant eBay submitted an NFT related trademark application, and KPMG will invest $30million in Web3 and metauniverse
Redis入门完整教程:键管理
Locust performance test - environment construction and use
Mongodb aggregation operation summary
Google Earth engine (GEE) - tasks upgrade enables run all to download all images in task types with one click
Li Kou 98: verify binary search tree
Unity Xiuxian mobile game | Lua dynamic sliding function (specific implementation of three source codes)
LOGO特训营 第五节 字体结构与设计常用技法
Attack and defense world misc advanced area can_ has_ stdio?
More than 30 institutions jointly launched the digital collection industry initiative. How will it move forward in the future?
It is said that software testing is very simple, but why are there so many dissuasions?
md5工具类