您好,登錄后才能下訂單哦!
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
免責(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)容。