亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入理解redis中multi與pipeline

 更新時間:2021年06月02日 11:38:00   作者:Walker5883  
pipeline 只是把多個redis指令一起發(fā)出去,redis并沒有保證這些指定的執(zhí)行是原子的;multi相當于一個redis的transaction的,保證整個操作的原子性,避免由于中途出錯而導(dǎo)致最后產(chǎn)生的數(shù)據(jù)不一致。本文詳細的介紹,感興趣的可以了解一下

背景

由于對redis緩存中數(shù)據(jù)有批量操作,例如預(yù)熱緩存數(shù)據(jù),或者在列表頁批量去獲取緩存數(shù)據(jù),在使用了multi批量提交事務(wù)后,發(fā)現(xiàn)redis壓力高居不下,而使用了pipeline之后壓力回落了平常,也因為這個案例,特在此寫個分析與筆記。

multi

簡介

標記一個事務(wù)塊的開始。
事務(wù)塊內(nèi)的多條命令會按照先后順序被放進一個隊列當中,最后由 EXEC 命令原子性(atomic)地執(zhí)行。

實現(xiàn)原理

我用php擴展調(diào)起redis服務(wù),執(zhí)行,代碼如下:

$redis = new redis();
$redis->connect('127.0.0.1',6379);
$handle = $redis->multi();
$handle->incr('a');
$handle->incr('b');
$handle->exec();

為了查看這期間具體的連接過程,用wireshark監(jiān)聽回環(huán)地址端口6379,抓包請求如下圖所示:

redis客戶端與服務(wù)端建立連接后,multi標記事務(wù)開始,之后每次執(zhí)行,服務(wù)端返回queued隊列標志。查看redis源碼src/multi.c文件:

void queueMultiCommand(client *c) {
    multiCmd *mc;
    int j;

    c->mstate.commands = zrealloc(c->mstate.commands,
            sizeof(multiCmd)*(c->mstate.count+1));
    mc = c->mstate.commands+c->mstate.count;
    mc->cmd = c->cmd;
    mc->argc = c->argc;
    mc->argv = zmalloc(sizeof(robj*)*c->argc);
    memcpy(mc->argv,c->argv,sizeof(robj*)*c->argc);
    for (j = 0; j < c->argc; j++)
        incrRefCount(mc->argv[j]);
    c->mstate.count++;
}

在上述源碼中可以看到redis服務(wù)端每次會把事務(wù)塊中的命令保存到內(nèi)存中,上述簡介已經(jīng)解釋過最后通過exec命令執(zhí)行,再看下面示例圖的返回結(jié)果可以了解到redis服務(wù)端一次性返回所有命令執(zhí)行返回結(jié)果。

pipeline

簡介

客戶端將執(zhí)行的命令寫入到緩沖中,最后由exec命令一次性發(fā)送給redis執(zhí)行返回。

實現(xiàn)原理

同樣,用相關(guān)代碼調(diào)用redis抓包;

$redis = new redis();
$redis->connect('127.0.0.1',6379);
$handle = $redis->pipeline();
$handle->incr('a');
$handle->incr('b');
$handle->exec();

繼續(xù)用wireshark抓包,如下圖所示

pipeline 客戶端請求包示例圖

這上面的圖片簡要分析一下,pipeline管道操作是需要客戶端與服務(wù)端的支持,客戶端將命令寫入緩沖,最后再通過exec命令發(fā)送給服務(wù)端,服務(wù)端通過命令拆分,逐個執(zhí)行返回結(jié)果。

兩者的區(qū)別

由上面的請求也可以看出了兩者最明顯的區(qū)別是客戶端發(fā)送請求的方式不一樣,具體相關(guān)區(qū)別如下:

  • pipeline選擇客戶端緩沖,multi選擇服務(wù)端緩沖;
  • 請求次數(shù)的不一致,multi需要每個命令都發(fā)送一次給服務(wù)端,pipeline最后一次性發(fā)送給服務(wù)端,請求次數(shù)相對于multi減少
  • multi/exec可以保證原子性,而pipeline不保證原子性

到此這篇關(guān)于深入理解redis中multi與pipeline 的文章就介紹到這了,更多相關(guān)redis multi與pipeline 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis發(fā)布訂閱和實現(xiàn).NET客戶端詳解

    Redis發(fā)布訂閱和實現(xiàn).NET客戶端詳解

    發(fā)布訂閱在應(yīng)用級其作用是為了減少依賴關(guān)系,通常也叫觀察者模式。主要是把耦合點單獨抽離出來作為第三方,隔離易變化的發(fā)送方和接收方。下面這篇文章主要給大家介紹了關(guān)于Redis發(fā)布訂閱和實現(xiàn).NET客戶端的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • redis復(fù)制有可能碰到的問題匯總

    redis復(fù)制有可能碰到的問題匯總

    這篇文章主要介紹了redis復(fù)制有可能碰到的問題匯總,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 詳解Redis主從復(fù)制實踐

    詳解Redis主從復(fù)制實踐

    本文將演示主從復(fù)制如何配置、實現(xiàn)以及實現(xiàn)原理,Redis主從復(fù)制三大策略,全量復(fù)制、部分復(fù)制和立即復(fù)制。
    2021-05-05
  • Redis節(jié)省內(nèi)存的十個技巧分享

    Redis節(jié)省內(nèi)存的十個技巧分享

    你是否在工作中遇到過Redis的bigkey導(dǎo)致的內(nèi)存占用嚴重、查詢耗時大大增加?同時bigKey還可能導(dǎo)致Redis實例的崩潰,因為內(nèi)存不夠用了,所以本文給大家介紹了Redis極大節(jié)省內(nèi)存的10個技巧,需要的朋友可以參考下
    2024-04-04
  • Redis實現(xiàn)主從復(fù)制方式(Master&Slave)

    Redis實現(xiàn)主從復(fù)制方式(Master&Slave)

    這篇文章主要介紹了Redis實現(xiàn)主從復(fù)制方式(Master&Slave),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Redis在項目中常見的12種使用場景示例和說明

    Redis在項目中常見的12種使用場景示例和說明

    Redis是一個開源的高性能鍵值對數(shù)據(jù)庫,它以其內(nèi)存中數(shù)據(jù)存儲、鍵過期策略、持久化、事務(wù)、豐富的數(shù)據(jù)類型支持以及原子操作等特性,在許多項目中扮演著關(guān)鍵角色,以下是整理的12個Redis在項目中常見的使用場景舉例說明和解釋
    2024-06-06
  • Redis 內(nèi)存碎片原因及清理

    Redis 內(nèi)存碎片原因及清理

    內(nèi)存碎片是指在內(nèi)存分配的時候,產(chǎn)生的不能重復(fù)利用的空間,本文主要介紹了Redis 內(nèi)存碎片原因及清理,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • redis配置文件中常用配置詳解

    redis配置文件中常用配置詳解

    這篇文章主要介紹了redis配置文件中常用配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Redis概述及l(fā)inux安裝redis的詳細教程

    Redis概述及l(fā)inux安裝redis的詳細教程

    這篇文章主要介紹了Redis概述及l(fā)inux安裝redis的詳細教程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Redis教程(十一):虛擬內(nèi)存介紹

    Redis教程(十一):虛擬內(nèi)存介紹

    這篇文章主要介紹了Redis教程(十一):虛擬內(nèi)存介紹,本文講解了虛擬內(nèi)存簡介、應(yīng)用場景和配置方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評論