需求是:有大量的ip地址,作为分布式爬虫的任务分配,需要加入到redis队列中,如果使用数据库提取+for+redis-lpush的方式速度非常慢,大约放80w数据就得4-5个小时(网络状况而定)。目前需要将6.5kw的数据放到redis所以需要改进队列方式。
首先将数据库中提取ip列表,转换成 保存为data.txt文本
这样的格式。order可以是rpush,set这样的redis队列。
2:使用如下的bash脚本 保存为:redis-pipe.sh
#!/usr/bin/env bash
while read CMD; do
# each command begins with *{number arguments in command}\r\n
XS=($CMD); printf "*${#XS[@]}\r\n"
# for each argument, we append ${length}\r\n{argument}\r\n
for X in $CMD; do printf "\$${#X}\r\n$X\r\n"; done
done
放在同一目录下:
cat data.txt | sh redis-pipe.sh | redis-cli --pipe
如果报:Syntax error: “(” unexpected (expecting “done”) 错误 解决方式是 cat data.txt | bash crate.sh | redis-cli –pipe 将sh 改成bash 。。
如果暂时没有数据想做测试的可以用这个命令生成一个data.txt
for N in $(seq 1 1000); do echo "SADD test $N"; done > data.txt
之后在redis-cli 中就可以改一些参数比如-p制定端口 -h 制定ip地址 -a 制定密码
处理redis-cli –pipe导入需要的redis Protocol数据格式
*3
$5
lpush
$9
baidu_api
$11
42.2.162.72
*3
$5
lpush
$9
baidu_api
$11
42.2.162.73
http://redis.io/topics/mass-insert
https://gist.github.com/abtrout/432ce44fa77a9620c739#file-redis-pipe-md
原创文章,转载请注明: 转载自URl-team
本文链接地址: Redis大批量上传数据 使用shell与python脚本