我正在考虑使用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
您可以提供的任何有用信息表示赞赏。我只想确保自己走上正确的道路。
答案 0 :(得分:2)
我会说你正处于过早优化的道路上(通常不是最好的)。
任何支持流水线操作的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