1. 程式人生 > >redis pipe管道

redis pipe管道

cli redis 管道

redis pipe管道

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

在需要批量執行redis 命令的場景下,如果命令單條逐個執行,那麽總共花費的時間是命令條數 N * RTT。

redis 提供了管道技術來提高批量執行效率,即將多個命令打包發送給redis服務端,所有命令執行完後,再將所有結果打包返回。

在所有命令執行結束前,redis服務器會緩存已執行結束的結果。

在redis-cli命令行中,

使用redis管道技術時,我們通常將待執行的命令放到一個文本裏,比如commands.txt,然後使用命令:

cat commands.txt | redis-cli --pipe

去讀取文本裏的命令,然後打包已pipe管道的方式發送給redis服務端。

如果命令需要帶參數,我們可以根據redis官方提供的命令協議格式:

*<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

額,上面這段是不是很煩?是的,其實沒有這麽復雜,你可以直接將多個redis命令寫到一個文件commands.txt裏,記住是每個命令占一行。

然後執行:cat commands.txt |redis-cli --pipe

以管道方式執行。

你以為就萬事大吉了?no!你很可能會遇到這個錯誤:

ERR unknown command ‘et‘

即執行了第一條命令,剩下的都報錯了。原因是redis-cli中只支持dos格式的換行符 \r\n ,因此你需要對文件進行轉碼:unix2dos commands.txt

然後再執行上面的命令。


附:安裝unix2dos:

macOS:

brew install unix2dos -y


redis pipe管道