redis pipe管道redis
redis命令在從提交到返回處理結果的過程當中,消耗的時間咱們稱之爲RTT(往返時間)。緩存
在須要批量執行redis 命令的場景下,若是命令單條逐個執行,那麼總共花費的時間是命令條數 N * RTT。服務器
redis 提供了管道技術來提升批量執行效率,即將多個命令打包發送給redis服務端,全部命令執行完後,再將全部結果打包返回。ide
在全部命令執行結束前,redis服務器會緩存已執行結束的結果。spa
在redis-cli命令行中,命令行
使用redis管道技術時,咱們一般將待執行的命令放到一個文本里,好比commands.txt,而後使用命令:unix
cat commands.txt | redis-cli --pipeorm
去讀取文本里的命令,而後打包已pipe管道的方式發送給redis服務端。ip
若是命令須要帶參數,咱們能夠根據redis官方提供的命令協議格式:it
*<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