欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis教程(十三):管線詳解

 更新時(shí)間:2015年05月04日 08:42:06   投稿:junjie  
這篇文章主要介紹了Redis教程(十三):管線詳解,本文講解了請(qǐng)求應(yīng)答協(xié)議和RTT、管線(pipelining)、Benchmark等內(nèi)容,需要的朋友可以參考下

一、請(qǐng)求應(yīng)答協(xié)議和RTT:

    Redis是一種典型的基于C/S模型的TCP服務(wù)器。在客戶端與服務(wù)器的通訊過(guò)程中,通常都是客戶端率先發(fā)起請(qǐng)求,服務(wù)器在接收到請(qǐng)求后執(zhí)行相應(yīng)的任務(wù),最后再將獲取的數(shù)據(jù)或處理結(jié)果以應(yīng)答的方式發(fā)送給客戶端。在此過(guò)程中,客戶端都會(huì)以阻塞的方式等待服務(wù)器返回的結(jié)果。見如下命令序列:
   

復(fù)制代碼 代碼如下:

 Client: INCR X
    Server: 1
    Client: INCR X
    Server: 2
    Client: INCR X
    Server: 3
    Client: INCR X
    Server: 4
 

    在每一對(duì)請(qǐng)求與應(yīng)答的過(guò)程中,我們都不得不承受網(wǎng)絡(luò)傳輸所帶來(lái)的額外開銷。我們通常將這種開銷稱為RTT(Round Trip Time)?,F(xiàn)在我們假設(shè)每一次請(qǐng)求與應(yīng)答的RTT為250毫秒,而我們的服務(wù)器可以在一秒內(nèi)處理100k的數(shù)據(jù),可結(jié)果則是我們的服務(wù)器每秒至多處理4條請(qǐng)求。要想解決這一性能問(wèn)題,我們?cè)撊绾芜M(jìn)行優(yōu)化呢?
   
二、管線(pipelining):

    Redis在很早的版本中就已經(jīng)提供了對(duì)命令管線的支持。在給出具體解釋之前,我們先將上面的同步應(yīng)答方式的例子改造為基于命令管線的異步應(yīng)答方式,這樣可以讓大家有一個(gè)更好的感性認(rèn)識(shí)。
 

復(fù)制代碼 代碼如下:

    Client: INCR X
    Client: INCR X
    Client: INCR X
    Client: INCR X
    Server: 1
    Server: 2
    Server: 3
    Server: 4
 

    從以上示例可以看出,客戶端在發(fā)送命令之后,不用立刻等待來(lái)自服務(wù)器的應(yīng)答,而是可以繼續(xù)發(fā)送后面的命令。在命令發(fā)送完畢后,再一次性的讀取之前所有命令的應(yīng)答。這樣便節(jié)省了同步方式中RTT的開銷。
    最后需要說(shuō)明的是,如果Redis服務(wù)器發(fā)現(xiàn)客戶端的請(qǐng)求是基于管線的,那么服務(wù)器端在接受到請(qǐng)求并處理之后,會(huì)將每條命令的應(yīng)答數(shù)據(jù)存入隊(duì)列,之后再發(fā)送到客戶端。
   
三、Benchmark:

    以下是來(lái)自Redis官網(wǎng)的測(cè)試用例和測(cè)試結(jié)果。需要說(shuō)明的是,該測(cè)試是基于loopback(127.0.0.1)的,因此RTT所占用的時(shí)間相對(duì)較少,如果是基于實(shí)際網(wǎng)絡(luò)接口,那么管線機(jī)制所帶來(lái)的性能提升就更為顯著了。

復(fù)制代碼 代碼如下:

require 'rubygems'
    require 'redis'
   
    def bench(descr)
        start = Time.now
        yield
        puts "#{descr} #{Time.now-start} seconds"
    end
   
    def without_pipelining
        r = Redis.new
        10000.times {
            r.ping
        }
    end
   
    def with_pipelining
        r = Redis.new
        r.pipelined {
            10000.times {
                r.ping
            }
        }
    end
   
    bench("without pipelining") {
        without_pipelining
    }
    bench("with pipelining") {
        with_pipelining
    }
    //without pipelining 1.185238 seconds
    //with pipelining 0.250783 seconds

相關(guān)文章

  • Redis持久化RDB和AOF區(qū)別詳解

    Redis持久化RDB和AOF區(qū)別詳解

    這篇文章主要介紹了Redis持久化RDB和AOF區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Redis的BitMap使用操作命令

    Redis的BitMap使用操作命令

    Redis 為我們提供了位圖這一數(shù)據(jù)結(jié)構(gòu),每個(gè)用戶每天的登錄記錄只占據(jù)一位,365天就是365位,僅僅需要46字節(jié)就可存儲(chǔ),極大地節(jié)約了存儲(chǔ)空間,這篇文章主要介紹了Redis的BitMap使用操作命令,需要的朋友可以參考下
    2023-10-10
  • k8s部署redis哨兵的實(shí)現(xiàn)

    k8s部署redis哨兵的實(shí)現(xiàn)

    本文主要介紹了k8s部署redis哨兵的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 詳解Redis命令和鍵_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    詳解Redis命令和鍵_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Redis命令用于在redis服務(wù)器上執(zhí)行某些操作,下面通過(guò)本文給大家分享Redis命令和鍵,需要的的朋友參考下吧
    2017-08-08
  • redis?sentinel監(jiān)控高可用集群實(shí)現(xiàn)的配置步驟

    redis?sentinel監(jiān)控高可用集群實(shí)現(xiàn)的配置步驟

    這篇文章主要介紹了redis?sentinel監(jiān)控高可用集群實(shí)現(xiàn)的配置步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Redis教程(二):String數(shù)據(jù)類型

    Redis教程(二):String數(shù)據(jù)類型

    這篇文章主要介紹了Redis教程(二):String數(shù)據(jù)類型,本文講解了String數(shù)據(jù)類型概述、相關(guān)命令列表、命令使用示例三部分內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Redis 數(shù)據(jù)庫(kù)忘記密碼找回或重置的解決方法

    Redis 數(shù)據(jù)庫(kù)忘記密碼找回或重置的解決方法

    對(duì)于 Redis 數(shù)據(jù)庫(kù),如果忘記了密碼,可以通過(guò)密碼重置來(lái)找回密碼,今天通過(guò)本文給大家分享Redis 數(shù)據(jù)庫(kù)忘記密碼找回或重置的解決方法,感興趣的朋友一起看看吧
    2024-01-01
  • 一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過(guò)程實(shí)戰(zhàn)記錄

    一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過(guò)程實(shí)戰(zhàn)記錄

    這篇文章主要給大家分享了一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過(guò)程實(shí)戰(zhàn)記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 淺談我是如何用redis做實(shí)時(shí)訂閱推送的

    淺談我是如何用redis做實(shí)時(shí)訂閱推送的

    這篇文章主要介紹了淺談我是如何用redis做實(shí)時(shí)訂閱推送的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • NoSQL和Redis簡(jiǎn)介及Redis在Windows下的安裝和使用教程

    NoSQL和Redis簡(jiǎn)介及Redis在Windows下的安裝和使用教程

    這篇文章主要介紹了NoSQL和Redis簡(jiǎn)介及Redis在Windows下的安裝和使用教程,本文同時(shí)講解了python操作redis,并給出了操作實(shí)例,需要的朋友可以參考下
    2015-01-01

最新評(píng)論