繁体   English   中英

Redis质量增量更新

[英]redis mass incrementation updates

我在redis数据库中大约有10,000,000条记录。 我收到了一个单列CSV文件,其中包含大约100,000个字符串,这些字符串与redis数据库中的键相对应。 对于CSV中的每个字符串,我需要将redis中的值增加1。 通常使用递增INCR命令,但是有什么方法可以比创建一个循环进行100,000次并逐个发送INCR命令以分别更改每个键值的循环更快呢? 有更大规模的更新方式吗?

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

其次,如果您的100,000个字符串中有重复的键,请使用“ INCRBY”命令。 例如,文档是“ k1,1; k2,2; k1,3”,那么您可以使用“ INCRBY k1 2”代替2个“ INCR k1”

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

@Mark_H的答案是教科书(+1),但我有一个很主意的想法,您可以测试是否需要。 假设(这是一个很大的假设)您的10M左右密钥是可序列化的,并且给定密钥在序列中的位置,则可以派生相关密钥的名称(例如,如果名称基于连续的数字标识符),如何准备一个位串,是否已设置的位指示递增操作?

这样的比特值大约为1.2MB,但是另一种选择是发送100K op(无论是否流水线),因此网络效率更高。 性能如何? 想法的下一部分是编写一个小的Lua,它实际上接受此值并对相关密钥进行INCR。 我怀疑它的性能是否可以甚至更好。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM