使用--pipe进行redis批量导入

d-_*_*_-b 7 redis

我正在尝试使用该--pipe功能导入一百万行redis命令.

redis_version:2.8.1

cat file.txt | redis-cli --pipe

这会导致以下错误:

从服务器读取时出错:由对等方重置连接

有谁知道我做错了什么?

file.txt 包含,例如,

lpush name joe
lpush name bob
Run Code Online (Sandbox Code Playgroud)

编辑:我现在看到可能有一种使用管道模式的特殊格式(?) - http://redis.io/topics/protocol

小智 12

第一点是参数必须是双引号.在这一点上,文档有些误导.

所以一个有效的语法是:

lpush "name" "joe"
lpush "name" "bob"
Run Code Online (Sandbox Code Playgroud)

第二点是每一行必须以a结束,\r\n而不仅仅是by \n.要解决这一问题,您只需使用命令转换文件即可unix2dos

喜欢 : unix2dos file.txt

然后您可以使用导入文件 cat file.txt | src/redis-cli --pipe

这对我有用.

  • 你的答案有帮助.感谢awk可以做很多工作......`cat file.txt | awk'{print"SET","\""$ 1"\"","\""$ 2"\""}'| awk'{printf"%s\r \n",$ 0}'| redis-cli --pipe` (3认同)

del*_*eil 8

要使用管道模式(也就是大量插入),您必须确实以Redis协议格式直接提供命令.

相应的Redis协议LPUSH name joe是:

*3
$5
LPUSH
$4
name
$3
joe
Run Code Online (Sandbox Code Playgroud)

或者作为带引号的字符串:"*3\r\n$5\r\nLPUSH\r\n$4\r\nname\r\n$3\r\njoe\r\n".

这是您的输入文件必须包含的内容.

Redis的文档包括红宝石样本,以帮助您生成的协议:看gen_redis_proto.