亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Redis批量執(zhí)行(如list批量添加)命令工具 —— pipeline管道應(yīng)用

WelliJhon / 2989人閱讀

摘要:服務(wù)端處理命令,并將結(jié)果返回給客戶端。這樣的連接可能非??煸谝粋€(gè)回路網(wǎng)絡(luò)中,也可能非常慢在廣域網(wǎng)上經(jīng)過(guò)多個(gè)結(jié)點(diǎn)才能互通的兩個(gè)主機(jī)。

前言

Redis使用的是客戶端-服務(wù)器(CS)模型和請(qǐng)求/響應(yīng)協(xié)議的TCP服務(wù)器。這意味著通常情況下一個(gè)請(qǐng)求會(huì)遵循以下步驟:

(1)客戶端向服務(wù)端發(fā)送一個(gè)查詢請(qǐng)求,并監(jiān)聽(tīng)Socket返回,通常是以阻塞模式,等待服務(wù)端響應(yīng)。
(2)服務(wù)端處理命令,并將結(jié)果返回給客戶端。

客戶端和服務(wù)端通過(guò)網(wǎng)絡(luò)進(jìn)行連接。這樣的連接可能非??欤ㄔ谝粋€(gè)回路網(wǎng)絡(luò)中),也可能非常慢(在廣域網(wǎng)上經(jīng)過(guò)多個(gè)結(jié)點(diǎn)才能互通的兩個(gè)主機(jī))。

但是無(wú)論是否存在網(wǎng)絡(luò)延遲,數(shù)據(jù)包從客戶端傳輸?shù)椒?wù)端,以及客戶端從服務(wù)端獲得響應(yīng)都需要花費(fèi)一些時(shí)間。這段時(shí)間就稱為往返時(shí)延(Round Trip Time)。

因此當(dāng)客戶端需要執(zhí)行一串請(qǐng)求的時(shí)候,很容易看出它對(duì)性能的影響(例如往同一個(gè)隊(duì)列中加入大量元素,或者往數(shù)據(jù)庫(kù)中插入大量的鍵)。如果RTT時(shí)長(zhǎng)為250毫秒(在基于廣域網(wǎng)的低速連接環(huán)境下),即使服務(wù)器每秒可以處理10萬(wàn)個(gè)請(qǐng)求,但是實(shí)際上我們依然只能每秒處理最多4個(gè)請(qǐng)求。

如果處于一個(gè)回路網(wǎng)絡(luò)中,RTT時(shí)長(zhǎng)則相當(dāng)短(我的主機(jī)ping 127.0.0.1時(shí)只需要0.063ms),但是如果你執(zhí)行一大串寫(xiě)入請(qǐng)求的時(shí)候,還是會(huì)有點(diǎn)長(zhǎng)。

如果需要一次執(zhí)行多個(gè)redis命令,以往的方式需要發(fā)送多次命令請(qǐng)求,由redis服務(wù)器依次執(zhí)行,并返回結(jié)果。

為了解決此類問(wèn)題,設(shè)計(jì)者設(shè)計(jì)出了redis管道命令:客戶端可以向服務(wù)器發(fā)送多個(gè)請(qǐng)求,而不必等待回復(fù),并最終在一個(gè)步驟中讀取回復(fù)返回給客戶端,從而大大增加了協(xié)議性能。

pipeline在php中的應(yīng)用

管道的開(kāi)啟方式最主要是一條命令:$redis->pipeline()

批量給一個(gè)list類型的key添加10w條數(shù)據(jù),實(shí)例如下:

connect("127.0.0.1", 6379);
   $redis->auth("******");
   $redis->select(0);
   $redis->pipeline();//開(kāi)啟管道
   
   //假設(shè)變量$data數(shù)組有10w條數(shù)據(jù),批量添加到list類型中
   $data = array(1,2,3,...,100000);
   $key = "list1";
   foreach($data as $value){
       $redis->rpush($key,$value);
   }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/29596.html

相關(guān)文章

  • 使用Redis管道提升性能

    摘要:首發(fā)于樊浩柏科學(xué)院的管道是用來(lái)打包多條無(wú)關(guān)命令批量執(zhí)行,以減少多個(gè)命令分別執(zhí)行帶來(lái)的網(wǎng)絡(luò)交互時(shí)間。在一些批量操作數(shù)據(jù)的場(chǎng)景,使用管道可以顯著提升的讀寫(xiě)性能。這時(shí),可以使用管道實(shí)現(xiàn),也可以內(nèi)嵌腳本實(shí)現(xiàn)。 首發(fā)于 樊浩柏科學(xué)院 Redis 的 管道 (pipelining)是用來(lái)打包多條無(wú)關(guān)命令批量執(zhí)行,以減少多個(gè)命令分別執(zhí)行帶來(lái)的網(wǎng)絡(luò)交互時(shí)間。在一些批量操作數(shù)據(jù)的場(chǎng)景,使用管道可以顯著...

    rickchen 評(píng)論0 收藏0
  • 使用python來(lái)操作redis用法詳解

    摘要:連接提供兩個(gè)類和用于實(shí)現(xiàn)的命令,用于實(shí)現(xiàn)大部分官方的命令,并使用官方的語(yǔ)法和命令,是的子類,用于向后兼容舊版本的。如果使用關(guān)系數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)點(diǎn)擊,可能存在大量的行級(jí)鎖爭(zhēng)用。 1、redis連接 redis提供兩個(gè)類Redis和StrictRedis用于實(shí)現(xiàn)Redis的命令,StrictRedis用于實(shí)現(xiàn)大部分官方的命令,并使用官方的語(yǔ)法和命令,Redis是StrictRedis的子類,用...

    Corwien 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<