我尝试使用--pipe
特性导入一百万行redis命令。
redis版本:2.8.1
cat file.txt | redis-cli --pipe
这将导致以下错误:
从服务器阅读时出错:对等方重置连接
有人知道我做错了什么吗?file.txt
包含例如
lpush name joe
lpush name bob
edit:我现在看到可能有一个特殊的格式(?)用于使用管道模式-http://redis.io/topics/protocol
我尝试使用--pipe
特性导入一百万行redis命令。
redis版本:2.8.1
cat file.txt | redis-cli --pipe
这将导致以下错误:
从服务器阅读时出错:对等方重置连接
有人知道我做错了什么吗?file.txt
包含例如
lpush name joe
lpush name bob
edit:我现在看到可能有一个特殊的格式(?)用于使用管道模式-http://redis.io/topics/protocol
6条答案
按热度按时间rbpvctlc1#
第一点是参数必须用双引号引起来。文档在这一点上有些误导。
因此,一个有效的语法是:
第二点是每行必须以
\r\n
结尾,而不仅仅是以\n
结尾。例如:
unix2dos file.txt
然后可以使用
cat file.txt | src/redis-cli --pipe
导入文件这对我很有效。
n8ghc7c12#
要使用管道模式(也称为bulk loading, or mass insertion),您必须直接以Redis protocol提供命令。
LPUSH name joe
对应的Redis协议是:或作为带引号的字符串:
"*3\r\n$5\r\nLPUSH\r\n$4\r\nname\r\n$3\r\njoe\r\n"
.这是输入文件必须包含的内容。
Redis documentation包含一个Ruby示例,可帮助您生成协议:参见
gen_redis_proto
。Python示例在redis-tools包中提供。
ntjbwcob3#
现有工具可将客户端命令直接转换为Redis Wire协议消息。例如:
我的客户端脚本文件|redis-cli --管道选项
https://golanglibs.com/dig_in/redis-masshttps://github.com/almeida/redis-mass显示器
tgabmvqs4#
有两种可能性。
第一个检查点超出了maxclients限制。
您可以使用“info clients”和“config get maxclients”redis命令进行检查。
在我的桌面结果是下面。
然后我尝试使用pipe命令,结果如下。
如果结果相同,您必须更改redis.conf文件。
秒检查点是ulimit选项。
ulimit选项更改需要root权限。请检查以下链接。
How do I change the number of open files limit in Linux?
2w3kk1z55#
发生此错误的原因是Redis中的超时设置为默认值0。您需要使用以下命令通过redis-cli配置此超时值:
要连接到redis服务器:重定向-CLI-H-P-A
要查看配置的超时值:此命令行:* * config get timemout**,用于查看Redis服务器中配置的超时值。
要为redis超时设置新值:此命令行:* * config set timeout 120**,将超时时间设置为2分钟。因此,您需要将redis超时时间设置为您的执行所需的时间。
我希望这些答案对你有帮助。
s3fp2yjn6#
您可以使用以下命令将文件数据导入到redis