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

感谢您提供任何有用的信息。我只是想确保我走在正确的道路上。

4

1 回答 1

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"

Redis 协议在这里描述: http ://redis.io/topics/protocol

于 2013-09-18T12:28:01.437 回答