有時(shí)候,我們需要給redis庫中插入大量的數(shù)據(jù),如做性能測試前的準(zhǔn)備數(shù)據(jù)。遇到這種情況時(shí),偶爾可能也會(huì)懵逼一下,這里就給大家介紹一個(gè)批量導(dǎo)入數(shù)據(jù)的方法。
先準(zhǔn)備一個(gè)redis protocol的文件(redis protocol可以參考這里:https://redis.io/topics/protocol),這里是用java程序來輸出的,java代碼如下:
<<RedisBatchTest>>
public class RedisBatchTest {
public static void main(String[] args) {
String outputFile = "d:\\temp\\redis_input.txt";
RedisBatchTest test = new RedisBatchTest();
test.generateFile(outputFile);
}
/**
* 格式化成輸入字符串
*
* @param args
* @return
*/
private String getString(String key, String value) {
StringBuilder sb = new StringBuilder();
sb.append("*3").append("\r\n");
sb.append("$3").append("\r\n");
sb.append("SET\r\n");
sb.append("$").append(key.getBytes().length).append("\r\n");
sb.append(key).append("\r\n");
sb.append("$").append(value.getBytes().length).append("\r\n");
sb.append(value).append("\r\n");
return sb.toString();
}
public void generateFile(String file) {
BufferedWriter w = null;
String key = null;
String value = null;
StringBuilder sb = new StringBuilder();
try {
w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
for (int i = 1; i <= 380; i++) {
key = "test_batch_" + i;
value = "v_" + i + "注冊即送水電費(fèi)ServiceTest"; // 這是key對應(yīng)的value
sb.append(this.getString(key, value));
if (i % 10 == 0) {
w.write(sb.toString());
w.flush();
sb.delete(0, sb.length());
System.out.println("Current write: " + i);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
w.flush();
w.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
執(zhí)行以上代碼,就會(huì)在d:\\temp目錄下生成一個(gè)文本文件,格式如下:
以上就是redis protocol格式的文件了,請上傳到要執(zhí)行的機(jī)器上。然后使用以下命令來執(zhí)行它:
cat input/redis_input.txt | bin/redis-cli -p 6370 -a yourpasswd –pipe
如果執(zhí)行成功的話,你就可以看到如下信息了:
從以上輸出可以看出,380條數(shù)全部插入到redis服務(wù)器上啦。
更詳細(xì)的信息,可以參考:https://redis.io/topics/mass-insert