当前位置: 首页 > 面试题库 >

Redis大量插入

冯霖
2023-03-14
问题内容

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



 类似资料:
  • 问题内容: 这是我在stackoverflow上遇到的第一个问题。亲爱的社区,非常感谢您的综合知识和专业知识! 我是Redis的新手,所以请耐心等待,因为我敢肯定有一个简单的解决方案。 => Redis服务器v = 2.6.14 sha = 00000000:0 malloc = libc位= 64 => redis-cli 2.6.14 我已阅读“如何使用Redis大容量插入?”如何使用Redi

  • 问题内容: 我正在尝试尽快将大量数据加载到Redis中。 我的数据如下所示: 左侧有一个〜12位数字,右侧有一个可变长度的字符串。键将是左侧的数字,数据将是右侧的字符串。 在我刚装箱的Redis实例中,并带有未压缩的纯文本文件(带有此数据),一分钟我可以得到大约一百万条记录。我需要做大约4,500万,这大约需要45分钟。45分钟太长。 我是否可以进行一些标准的性能调整来进行此类优化?通过在单独的实

  • 就像有人说的第二种方式更慢,但我不确定,那么哪种方式更好呢?不能使数据库崩溃。

  • 我创建了一个向MySql数据库插入数百万个值的程序。我读到过有关批插入的文章,它将优化我的程序并使其更快,但当我尝试这样做时,它以同样的方式工作。我没有将每个值插入数据库,而是每次将500个值保存在一个列表中,然后将它们插入一个大循环中,如下所示: 然后我删除列表中的所有值,并再次开始收集500个值。它不应该工作得更好吗? 我的插入代码是: 我有一些问题: 1。为什么当我批量插入时它不能更快地工作

  • 问题内容: 我有一个存储在典型MySQL数据库中的表,并且已经使用java构建了一个小型解析器工具,以解析并构建neo4j数据库。该数据库将具有约4000万个节点,每个节点具有一个或多个边缘(最多可能有10个边缘)。问题来自我必须创建某些节点的方式。有一个用户节点,评论节点和标签节点。用户节点和主题标签节点必须各自唯一。我正在使用以下示例中的代码来确保唯一性: } 我已经考虑过使用批处理插入器,但

  • 我正在使用大容量插入并得到以下错误: 注意:加载文件中的数据不超过配置的列长度 从'C:\temp\dataload\load_file.txt'大容量插入load_data(firstrow=1,fieldterminator='0x09',rowterminator='\n',MAXERRORS=0,ERRORFILE='C:\temp\dataload\load_file') Msg 486