Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在redis中执行批量插入_Redis - Fatal编程技术网

无法在redis中执行批量插入

无法在redis中执行批量插入,redis,Redis,我正在centos 6上工作。我想从拥有1000多万条记录的mySQL表中大规模插入redis缓存。我已经阅读了redis协议及其格式。我能够将表数据复制到文本文件中的redis协议格式。但当我尝试执行pipe命令时,就会出现错误 Error reading from the server: Connection reset by peer 或 我正在使用以下命令: cat insert.txt | redis-cli --pipe insert.txt包含以下格式的数据: *3 $3 SE

我正在centos 6上工作。我想从拥有1000多万条记录的mySQL表中大规模插入redis缓存。我已经阅读了redis协议及其格式。我能够将表数据复制到文本文件中的redis协议格式。但当我尝试执行pipe命令时,就会出现错误

Error reading from the server: Connection reset by peer

我正在使用以下命令:

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  '

是的,因此使用
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

“\r\n”表示您需要cr和lf字符-您使用了它们吗?谢谢linus..我使用了这个技巧。输出是..所有数据都传输了。等待最后的答复。。。ERR unknown command“2”ERR unknown command“$4”ERR“echo”command ERR unknown command”$öa%~ĀĀĀĀL«7g»30秒无应答:退出。错误:6,回复:7,但我在使用get命令时得到了这些键的值。您能告诉我这里发生了什么吗?我的意思是它显示错误,但工作正常。看起来您发送的数据无效。也就是说,您的一些数据缺少参数或以某种方式关闭。也许在一个数字前缺少一个美元符号(未知的命令“2”),然后所有东西都被抛出。奇怪字符串的最后一个错误似乎与此有关:
一旦没有更多的数据可从stdin读取,它将从stdin发送一个带有随机20字节字符串的特殊ECHO命令。
*3
$3
SET
$2
K1
$2
V2
*3
$3
SET
$2
K2
$2
V3