Redis從檔案中批量插入資料
簡介
在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格式的換行符 \r\n ,如果你在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以上,如果你的版本較低,執行某個指令失敗,可能是版本太低了
另外強調一下轉碼的重要性,如果轉碼失敗,導入肯定失敗
導入指令檔案最好不要在一行結束留白格或者留白行,否則會出現意想不到的問題