zoukankan      html  css  js  c++  java
  • 利用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命令的使用

  • 相关阅读:
    创建子类
    SQL优化之一则MySQL中的DELETE、UPDATE 子查询的锁机制失效案例
    linux下报错:error while loading shared libraries
    linux下报错:error while loading shared libraries
    iterm2终端manpage高亮显示
    iterm2终端manpage高亮显示
    iterm2终端manpage高亮显示
    iterm2终端manpage高亮显示
    rabbitmq文章源
    rabbitmq文章源
  • 原文地址:https://www.cnblogs.com/luozeng/p/9115149.html
Copyright © 2011-2022 走看看