换个不平头的零钱怎么样。转换存储数据的方式。在
而不是使用5个值对每个值进行50k散列。使用5个散列,每个散列值为50k。在
例如,您的哈希依赖于eventid,并且您在该哈希中存储新的\u代码、旧的\u代码和其他内容
现在,对于新的_代码,有一个散列映射,其中包含eventid作为成员,其值作为value。所以新的_代码本身就是一个包含50k成员值对的哈希映射。在
所以循环5次而不是50k会相对更快。在
我做了一个小实验,下面是数字50k hashes * 5 elements
Memory : ~12.5 MB
Time to complete loop through of elements : ~1.8 seconds
5 hashes * 50k elements
Memory : ~35 MB
Time to complete loop through of elements : ~0.3 seconds.
我已经用简单的字符串进行了测试,比如KEY_I和VALUE_I(其中I是递增器),因此在您的情况下内存可能会增加。而且我刚刚浏览了数据,我没有做任何操作,所以时间也会根据你的情况而变化。在
正如您所看到的,这种改变可以使您的性能提高5倍,2倍的内存。在
Redis对一定范围内的哈希值进行压缩(512-默认值)。因为我们的存储量超过了这个范围(50k),所以内存中就出现了这个峰值。在
基本上,这是一个权衡,它取决于你选择一个最好的适合你的申请。在
关于第一个问题:在每个散列中都会得到新的_代码值,现在
所有内容都在一个哈希中->;只是一个调用。在
然后,你要一个接一个地更新旧的和新的。现在,您可以使用hmset通过一个调用完成这些操作。在
希望这有帮助。在