Redis大量数据插入
有時候Redis实例需要装载大量用户在短时间内产生的数据,数以百万计的keys需要被快速的创建称之为大量数据插入。从Redis 2.6开始redis-cli支持一种新的被称之为pipe mode的新模式用于执行大量数据插入工作,redis-cli –pipe试着尽可能快的发送数据到服务器。
第一步、先通过代码生成命令集合文件data.txt,我存放的目录为/usr/local/java/redis/bin/data.txt,我文件中只有三个set命令创建三个key,其中第二个命令是错误的,看看到时执行的时候返回什么结果,我的文件内容为:
SET Key0 Value0
SET Key1Value1
SET Key2 Value2
第二步、在linux中执行pipe mode模式的执行命令如下,其中123456是密码:
cat /usr/local/java/redis/bin/data.txt | /usr/local/java/redis/bin/redis-cli -h localhost -p 6379 -a 123456 --pipe
Linux命令执行后打印的结果:
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
All data transferred. Waiting for the last reply...
ERR wrong number of arguments for 'set' command
Last reply received from server.
errors: 1, replies: 3
结论:
客户端的redis-cli –pipe读取data.txt中的命令并解析它,尽可能快的发送数据到服务器,当读取最后一个命令之后,客户端就会发送一个特殊的ECHO命令,后面跟着20个随机的字符,等待收到的服务的答复就开始匹配这20个字符,当匹配时就可以成功完成退出。
,可见结果中返回errors: 1, replies: 3,说明redis收到了3条命令,其中1条错误。
也可以使用java代码执行命令:
String[] cmd = new String[] { "/bin/sh", "-c", "cat /usr/local/java/redis/bin/data.txt | /usr/local/java/redis/bin/redis-cli -h localhost -p 6379 -a 123456 --pipe" };
try {
Runtime.getRuntime().exec(cmd);
} catch (Exception e) {
e.printStackTrace();
}finally {
}