2017-01-02 45 views
0

让我们说有一个Redis散列有10个关键 - vals。我将它们全部读入perl hash(或任何语言map/hash/dict),并需要更新3个值。现在我改变了散列中的3个值,并且需要将其写回redis。 (A)&(B)哪一个会更快?Redis - hmset()in hash - 效率

(A)$redis_handle->hmset($redis_hash_name,\%perl_hash);

(B)while (($k,$val) = each %three_changed_items_in_perl_hash) { $redis_handle->hset($redis_hash_name,$k,$val); }

什么我试图考虑是: (A)是一个通信具有10种元素的Redis到。但redis需要更新其中的3个。即使值没有改变,redis是否浪费时间? (B)是3个通信用redis与1个元素。

回答

2

最快将发送一个HMSET只有更新的字段和它们各自的值。 Redis将只更新这些字段,不会对未明确提及的字段做任何事情。

(C) $redis_handle->hmset($redis_hash_name,\%three_changed_items_in_perl_hash); 
+0

+1。但我更怀疑的是:“Redis会忽略那些未经改变的哈希值?” 。否则,我需要循环并在做(C)时记下perl中更改的那些。 –

+0

它不会忽略它们,因此它们将被更新为它们在网络和CPU方面浪费的相同值 - 只准备一个只包含更改并发送它的散列。 –