2017-01-02 197 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方面浪費的相同值 - 只准備一個只包含更改併發送它的散列。 –