首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >redis大规模增量更新

redis大规模增量更新
EN

Stack Overflow用户
提问于 2014-09-15 04:22:49
回答 2查看 1K关注 0票数 1

我在一个红宝石数据库里有大约一千万条记录。我收到了一个列式CSV文件,其中包含大约100000个字符串,这些字符串对应于我的redis数据库中的键。对于CSV中的每个字符串,我需要将redis中的值增加一个。通常使用INCR命令来增加,但是有什么方法比创建循环更快吗?循环迭代100,000次,然后逐个发送INCR命令,以单独更改每个键值吗?是否有更大规模的更新方式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-15 05:56:39

首先,每个redis驱动程序都有执行批处理命令的“管道”。您不需要一个一个地发送incr命令,而是将它们一起发送到redis服务器。

其次,如果您的100000个字符串中有重复的键,请使用"INCRBY“命令。例如,doc是" k1 ,1;k2,2;k1,3",那么您可以使用"INCRBY k1 2“而不是2 "INCR k1”。

票数 2
EN

Stack Overflow用户

发布于 2014-09-15 11:19:17

注:以下是纯粹的推测,需要验证测试:)

@Mark_H的答案是教科书(+1),但我有一个疯狂的想法,如果你愿意,你可以测试。假设(这是一个很大的假设)您的10米左右的键是可序列化的,并且给定一个键在序列中的位置,您可以导出相关键的名称(例如,如果名称是基于一个连续的数字标识符),那么准备一个位串并让set位指示增量操作怎么样?

这样的位值大约是1.2MB大小,但另一种方法是发送100 more (不管是否流水线),因此这是更有效的网络效率。表演怎么样?这个想法的下一部分是编写一个小Lua,它实际上接受这个值,并对相关的键执行INCR。我怀疑,如果不是更好的话,它的表现也是一样的。

(如果您尝试这样做,请随时通知我们;)

在我的回答中,另一个隐藏的假设是,你只添加1,但这可以通过重复其他数字/附加键的方法来解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25840793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档