利用pipeline批量插入数据到redis

 在推荐系统中,推荐候选集格式一般是,itemid  itemid_list。要把itemid作为key,推荐列表作为value批量插入到redis。

比如文件cf.data为:

1 cf_763500210    342900215:0.210596124675,372400335:0.209455077845,663500334:0.0450228848833,771300304:0.303416465385
2 cf_4272909287   0197309320:1.0,1977309242:1.0,2171809288:0.987105477748,4041809109:1.0,4247509287:0.61113311824,4306209287:1.0,4687609332:0.842522148763,5364909320:1.0,7006909116:1.0,7578709264:0.300615689335,9405509328:0.710187812454,9578209232:1.0,9869609287:0.808605591539

在item前加cf,是为了标注此推荐候选集是有CF算法计算得到的。

1 cat cf.data | awk -F "	" '{print "set" " " $1 " " $2}' > cf.insert
1 cat cf.insert | /home/app/redis-4.0.9/src/redis-cli --pipe  

这时候会报错,那是字符编码格式问题,我的系统环境是LINUX。提前说一下哦,避免不必要的误会。

1 unix2dos data.insert 

此时,可以看到5条数据批量插入成功,0个错误。

如果数据量很大,一次插入可能会报错,那就得做数据分片

 1 #创建一个临时文件夹tmp 
 2 mkdir tmp 
 3 cd tmp
 4 cp ../cf.insert cf.insert   #将数据拷贝过来
 5 #对文件进行分片处理
 6 split cf.insert  
 7 #处理完,把文件删除 
 8 rm -rf cf.insert
 9 #用shell脚本执行插入命令
10 for i in `ls`; do cat $i | /home/app/redis-4.0.9/src/redis-cli --pipe; done;  
注意:ls使用Tab键上面的反引号括起来的。
`` 符号在shell里面正式的名称叫做backquote , 一般叫做命令替换
其作用是将引用命令的输出替换到字符串或者变量
通常如果需要在一个序列中用到其它命令的输出,就可以用``

 split命令的使用

原文地址:https://www.cnblogs.com/luozeng/p/9115149.html