天天看點

linux下redis添加資料檔案,Redis從檔案中批量插入資料

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以上,如果你的版本較低,執行某個指令失敗,可能是版本太低了

另外強調一下轉碼的重要性,如果轉碼失敗,導入肯定失敗

導入指令檔案最好不要在一行結束留白格或者留白行,否則會出現意想不到的問題