我正在尝试使用该--pipe
功能导入一百万行redis命令.
redis_version:2.8.1
cat file.txt | redis-cli --pipe
这会导致以下错误:
从服务器读取时出错:由对等方重置连接
有谁知道我做错了什么?
file.txt
包含,例如,
lpush name joe lpush name bob
编辑:我现在看到可能有一种使用管道模式的特殊格式(?) - http://redis.io/topics/protocol
第一点是参数必须是双引号.在这一点上,文档有些误导.
所以一个有效的语法是:
lpush "name" "joe" lpush "name" "bob"
第二点是每一行必须以a结束,\r\n
而不仅仅是by \n
.要解决这一问题,您只需使用命令转换文件即可unix2dos
喜欢 : unix2dos file.txt
然后您可以使用导入文件 cat file.txt | src/redis-cli --pipe
这对我有用.
要使用管道模式(也就是大量插入),您必须确实以Redis协议格式直接提供命令.
相应的Redis协议LPUSH name joe
是:
*3 $5 LPUSH $4 name $3 joe
或者作为带引号的字符串:"*3\r\n$5\r\nLPUSH\r\n$4\r\nname\r\n$3\r\njoe\r\n"
.
这是您的输入文件必须包含的内容.
该Redis的文档包括红宝石样本,以帮助您生成的协议:看gen_redis_proto
.