Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java redis批量增量更新_Java_Performance_Redis - Fatal编程技术网

Java redis批量增量更新

Java redis批量增量更新,java,performance,redis,Java,Performance,Redis,我在redis数据库中有大约10000000条记录。我收到了一个单列CSV文件,其中包含大约100000个字符串,对应于我的redis数据库中的键。对于CSV中的每个字符串,我需要将redis中的值增加1。通常使用INCR命令递增,但是有没有一种方法可以比创建一个循环更快,该循环迭代100000次并逐个发送INCR命令以分别更改每个键值?是否有更大规模的更新方式?首先,每个redis驱动程序都有“管道”来执行批处理命令。您不需要逐个发送incr命令,而是将它们一起发送到redis服务器 其次,如

我在redis数据库中有大约10000000条记录。我收到了一个单列CSV文件,其中包含大约100000个字符串,对应于我的redis数据库中的键。对于CSV中的每个字符串,我需要将redis中的值增加1。通常使用INCR命令递增,但是有没有一种方法可以比创建一个循环更快,该循环迭代100000次并逐个发送INCR命令以分别更改每个键值?是否有更大规模的更新方式?

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


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

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

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

这样一个比特值的大小大约为1.2MB,但另一种选择是发送100K操作(流水线或非流水线),这样网络效率更高。表演怎么样?这个想法的下一部分是编写一个小Lua,它实际接受这个值,并对相关键进行INCR。我怀疑它的表现即使不是更好,也是一样的

如果您尝试此功能,请随时向我们更新;)

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