我正在考虑使用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
您可以提供任何有用的信息,我们深表感谢。我只想确保自己在正确的道路上。
我会说您正在过早优化(通常不是最好的)的道路上。
任何带有支持管道的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