Redis從檔案中批量插入資料

玄學醬發表於2018-02-27

簡介


在redis中,有時候需要批量執行某些命令,但是在redis的redis-cli下,只能一條條的執行指令,實在太麻煩了!
想到這,你是不是藍瘦香菇? 如果能將要執行的指令一行行儲存到檔案中,然後用一行命令將檔案中的命令一次執行完成,那肯定爽死了!
所以下面,我要帶你冒著手指懷孕的危險,讓你爽一把:

建立檔案


首先建立一個txt檔案,將要執行的指令一行一行寫進去,當然,你也可以從其他檔案拷貝進來。

server$ vim d1.txt 

set myk12 v1
zadd zset12 0 a 1 b 3 c
sadd sset12 e f g hh
set myk22 v2
hset myset12 k1 v1
hmset myset22 k2 v2 k3 v3 k4 v4
set myk32 v3

轉碼


redis-cli中只支援dos格式的換行符 
 ,如果你在Linux下、Mac下或者Windows下建立的檔案,最好都轉個碼。沒有轉碼的檔案,執行會失敗。
下面是轉碼指令, 只需要在命令後加入要轉碼的檔案即可:

server> unix2dos d1.txt 
unix2dos: converting file d1.txt to DOS format...

如果使用unix2dos這個命令進行轉碼失敗,提示沒有這個命令,就需要進行安裝,我在在mac下用brew install unix2dos 安裝的unix2dos轉碼工具

brew install unix2dos
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
... 部分省略 ...
==> Pouring dos2unix-7.3.4.sierra.bottle.tar.gz
/usr/local/Cellar/dos2unix/7.3.4: 23 files, 344.3K

如果是CentOS,使用yum install unix2dos安裝unix2dos轉碼工具。

yum install unix2dos
已載入外掛:fastestmirror, security
... 部分省略 ...
已安裝:
  unix2dos.x86_64 0:2.2-35.el6
完畢!

執行匯入


檔案轉碼完成後,就可以匯入,匯入使用cat和redis-cli命令組合,一個用來讀取檔案內容,一個用來傳送檔案到redis執行,如果要匯入的檔案和redis在同一臺伺服器上,可以直接將本地檔案中的指令匯入redis執行

server> cat d1.txt | redis-cli 
OK
(integer) 3
(integer) 4
OK
(integer) 1
OK
OK

我們可以看到,你輸入多少條指令,就會有多少行返回記錄,並且告訴你它們的執行結果,如果你匯入的指令比較多,可以使用--pipe 這個引數來啟用pipe協議,它不僅僅能減少返回結果的輸出,還能更快的執行指令。

server> cat d1.txt | redis-cli --pipe
All data transferred. Waiting for the last reply...  
Last reply received from server.  
errors: 0, replies: 7  

如果你要匯入資料在遠端主機上,而且埠也是自定義的,那麼可以使用下面的方法將檔案匯入到遠端伺服器:

server> cat d1.txt | redis-cli -p 6380 -h 192.168.1.166 --pipe
All data transferred. Waiting for the last reply...  
Last reply received from server.  
errors: 0, replies: 7  

資料匯入完成後,我們就應該去redis看看是不是匯入成功了:

server$ redis-cli -p 6380
127.0.0.1:6380> get myk1
"v1"
127.0.0.1:6380> hgetall myset1
1) "k1"
2) "v1"
127.0.0.1:6380> hgetall myset2
1) "k2"
2) "v2"
3) "k3"
4) "v3"
5) "k4"
6) "v4"

是不是很爽,以後redis中有什麼資料要處理,直接一行命令搞定!

總結:


  • redis官方有批量匯入的方法,使用指令碼將檔案轉成redis協議支援的格式,可惜我測試時只能使用set k1 v1 這類包含三個元素的指令完成批量匯入。遇到四個元素的,提示執行成功,但是資料就是看不到。
  • 我使用的redis版本是2.8.0以上,如果你的版本較低,執行某個指令失敗,可能是版本太低了
  • 另外強調一下轉碼的重要性,如果轉碼失敗,匯入肯定失敗
  • 匯入指令檔案最好不要在一行結束留空格或者留空行,否則會出現意想不到的問題
本文作者:陳群
本文來自雲棲社群合作伙伴rediscn,瞭解相關資訊可以關注redis.cn網站。


相關文章