一尘不染

Redis大量插入

redis

我正在考虑使用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

您可以提供任何有用的信息,我们深表感谢。我只想确保自己在正确的道路上。


阅读 237

收藏
2020-06-20

共1个答案

一尘不染

我会说您正在过早优化(通常不是最好的)的道路上。

任何带有支持管道的Redis客户端的脚本语言都应能够将至少50K命令/秒推送到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

2020-06-20