中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis管線怎么理解

發布時間:2021-12-22 17:33:52 來源:億速云 閱讀:166 作者:iii 欄目:云計算

這篇文章主要講解了“Redis管線怎么理解”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Redis管線怎么理解”吧!

一、請求應答協議和RTT:

Redis是一種典型的基于C/S模型的TCP服務器。在客戶端與服務器的通訊過程中,通常都是客戶端率先發起請求,服務器在接收到請求后執行相應的任務,最后再將獲取的數據或處理結果以應答的方式發送給客戶端。在此過程中,客戶端都會以阻塞的方式等待服務器返回的結果。見如下命令序列:
    Client: INCR X
    Server: 1
    Client: INCR X
    Server: 2
    Client: INCR X
    Server: 3
    Client: INCR X
    Server: 4

在每一對請求與應答的過程中,我們都不得不承受網絡傳輸所帶來的額外開銷。我們通常將這種開銷稱為RTT(Round Trip Time)。現在我們假設每一次請求與應答的RTT為250毫秒,而我們的服務器可以在一秒內處理100k的數據,可結果則是我們的服務器每秒至多處理4 條請求。要想解決這一性能問題,我們該如何進行優化呢?

二、管線(pipelining):

Redis在很早的版本中就已經提供了對命令管線的支持。在給出具體解釋之前,我們先將上面的同步應答方式的例子改造為基于命令管線的異步應答方式,這樣可以讓大家有一個更好的感性認識。
    Client: INCR X
    Client: INCR X
    Client: INCR X
    Client: INCR X
    Server: 1
    Server: 2
    Server: 3
    Server: 4

從以上示例可以看出,客戶端在發送命令之后,不用立刻等待來自服務器的應答,而是可以繼續發送后面的命令。在命令發送完畢后,再一次性的讀取之前所有命令的應答。這樣便節省了同步方式中RTT的開銷。

最后需要說明的是,如果Redis服務器發現客戶端的請求是基于管線的,那么服務器端在接受到請求并處理之后,會將每條命令的應答數據存入隊列,之后再發送到客戶端。

三、Benchmark:

以下是來自Redis官網的測試用例和測試結果。需要說明的是,該測試是基于loopback(127.0.0.1)的,因此RTT所占用的時間相對較少,如果是基于實際網絡接口,那么管線機制所帶來的性能提升就更為顯著了。


1require'rubygems'
2require'redis'
3
4     def bench(descr)
5         start = Time.now
6         yield
7         puts "#{descr}#{Time.now-start} seconds"
8     end
9
10    def without_pipelining
11        r = Redis.new
1210000.times {
13            r.ping
14        }
15    end
16
17    def with_pipelining
18        r = Redis.new
19        r.pipelined {
2010000.times {
21                 r.ping
22            }
23        }
24    end
25
26    bench("without pipelining"){
27        without_pipelining
28     }
29    bench("with pipelining"){
30        with_pipelining
31     }
32    //without pipelining 1.185238 seconds
33    //with pipelining 0.250783 seconds 

感謝各位的閱讀,以上就是“Redis管線怎么理解”的內容了,經過本文的學習后,相信大家對Redis管線怎么理解這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三台县| 延川县| 太仆寺旗| 石泉县| 博野县| 札达县| 桑日县| 阜南县| 唐山市| 敦煌市| 定陶县| 新绛县| 盐亭县| 湘西| 浦江县| 奉节县| 元江| 铜鼓县| 楚雄市| 日土县| 西乌| 克东县| 吉林省| 靖安县| 孟津县| 长泰县| 承德市| 德惠市| 玉龙| 揭阳市| 铜梁县| 勃利县| 西城区| 水城县| 鲁山县| 阿尔山市| 翼城县| 平安县| 柘荣县| 和平区| 当阳市|