Redis大量插入

Chr*_*isS 5 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
Run Code Online (Sandbox Code Playgroud)

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

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

Did*_*zia 3

我想说你正走在过早优化的道路上(这通常不是最好的优化)。

任何具有支持管道的 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"
Run Code Online (Sandbox Code Playgroud)

Redis 协议描述如下: http: //redis.io/topics/protocol