Redis批量插入

5

我考虑使用Redis的协议进行批量插入,如此描述:http://redis.io/topics/mass-insert。 在开始编写处理此操作所需的代码之前,我只想确定Redis需要什么才能使其正常工作。

上面的链接建议调用SET操作[SET myKey Value myValue]使用大量插入,我需要创建一个命令,在文件中可以分为几行或单个带引号的字符串完成。

假设我不想使用SET命令,而是想使用SADD命令添加到一个集合中。我在这里使用的引号格式是否有效?

"*4\r\n$4\r\nSADD\r\n$2\r\n80\r\n$5\r\n1,2,34\r\n"

实际上,我要存储的是一个键:80,其值为1,2,34。

最终我想要的功能是:

Key     Value
80      1,2,34
90      4,8,34

获取两个集合的交集(SINTER)和/或并集(SUNION)。即 SINTER = 34 或 SUNION = 1、2、4、8、34。

如果您能提供任何有用的信息,我将不胜感激。我只是想确保我走在正确的道路上。

1个回答

3
我会说您正在走向过早的优化之路(通常不是最佳选择)。
任何支持Redis流水线技术的脚本语言都能够将至少50,000个命令/秒推送到Redis服务器。代码将是简单明了的,无需手动编码Redis协议。尽管大规模插入技巧更快,但你真的需要吗?
现在,如果你仍然想坚持大规模插入,你需要编码一个适当的Redis命令。你提供的示例有几个错误:
- 参数数量错误(你的示例应该以*3开头)。 - 最后一个参数的长度有误(1,2,34的长度为6个字节而不是5个)。 - 在SADD命令中,你需要每个集合项一个参数(例如Redis 1,2,34将成为单个项,而不是三个)。
适当的命令可能会像这样:
"*5\r\n$4\r\nSADD\r\n$2\r\n80\r\n$1\r\n1\r\n$1\r\n2\r\n$2\r\n34\r\n"

Redis 协议介绍可参考以下链接: http://redis.io/topics/protocol

非常好的解释。这实际上增加了清晰度和文档未提供的缺失信息。另外,只是作为一个提示,我需要插入数亿个数据,并且这些数据不会经常更新,这就是为什么我对这种方法感兴趣,而不是使用客户端进行管道传输。 - ChrisS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接