我正在开发centos 6.我想从拥有超过1000万条记录的mySQL表中执行大规模插入redis缓存。我已经阅读过有关redis协议及其格式的内容。我能够将表数据复制到文本文件中的redis协议格式。但是当我尝试执行管道命令时,错误即将来临。
Error reading from the server: Connection reset by peer
或
ERR Protocol error: expected '$', got '3'
我正在使用以下命令:
cat insert.txt | redis-cli --pipe
insert.txt包含以下格式的数据:
*3
$3
SET
$2
K1
$2
V1
如果可能的话,请告诉我这个文本文件中的多个命令的格式,如上例所示,该文件只包含一个set命令。如果你能给我一个至少有两个命令的文本文件的例子,我将不胜感激。
我也尝试过这种格式的文件数据。
"*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n"
它出现以下错误:
ERR unknown command '*3 $3 SET $3 key $5 value '
答案 0 :(得分:0)
是的,因此,使用CRLF
行分隔符发送数据非常重要 - 不字符串\r\n
,但实际上是那些字符。这意味着没有常规的unix行结尾,只有LF
或\n
。
如何插入这些内容取决于您使用的编辑器,但使用您所拥有的内容的最简单方法是将每个符号放在其自己的行上:
*3
$3
SET
$2
K1
$2
V2
并使用sed
:
cat insert.txt | sed 's/$/\r/g' | redis-cli --pipe
应该做的伎俩。
然后,为了一次发送许多命令(流水线),你只需将它添加到文件的末尾,如下所示:
*3
$3
SET
$2
K1
$2
V2
*3
$3
SET
$2
K2
$2
V3