溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

redis pipe管道

發(fā)布時(shí)間:2020-07-07 03:55:22 來(lái)源:網(wǎng)絡(luò) 閱讀:5936 作者:lilugoodjob 欄目:開發(fā)技術(shù)

redis pipe管道

redis命令在從提交到返回處理結(jié)果的過(guò)程中,消耗的時(shí)間我們稱之為RTT(往返時(shí)間)。

在需要批量執(zhí)行redis 命令的場(chǎng)景下,如果命令單條逐個(gè)執(zhí)行,那么總共花費(fèi)的時(shí)間是命令條數(shù) N * RTT。

redis 提供了管道技術(shù)來(lái)提高批量執(zhí)行效率,即將多個(gè)命令打包發(fā)送給redis服務(wù)端,所有命令執(zhí)行完后,再將所有結(jié)果打包返回。

在所有命令執(zhí)行結(jié)束前,redis服務(wù)器會(huì)緩存已執(zhí)行結(jié)束的結(jié)果。

在redis-cli命令行中,

使用redis管道技術(shù)時(shí),我們通常將待執(zhí)行的命令放到一個(gè)文本里,比如commands.txt,然后使用命令:

cat commands.txt | redis-cli --pipe

去讀取文本里的命令,然后打包已pipe管道的方式發(fā)送給redis服務(wù)端。

如果命令需要帶參數(shù),我們可以根據(jù)redis官方提供的命令協(xié)議格式:

*<number of arguments> CR LF

$<number of bytes of argument 1> CR LF

<argument data> CR LF

...

$<number of bytes of argument N> CR LF

<argument data> CR LF

額,上面這段是不是很煩?是的,其實(shí)沒(méi)有這么復(fù)雜,你可以直接將多個(gè)redis命令寫到一個(gè)文件commands.txt里,記住是每個(gè)命令占一行。

然后執(zhí)行:cat commands.txt |redis-cli --pipe

以管道方式執(zhí)行。

你以為就萬(wàn)事大吉了?no!你很可能會(huì)遇到這個(gè)錯(cuò)誤:

ERR unknown command 'et'

即執(zhí)行了第一條命令,剩下的都報(bào)錯(cuò)了。原因是redis-cli中只支持dos格式的換行符 \r\n ,因此你需要對(duì)文件進(jìn)行轉(zhuǎn)碼:unix2dos commands.txt

然后再執(zhí)行上面的命令。


附:安裝unix2dos:

macOS: 

brew install unix2dos -y


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI