redis pipe管道
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管道