2017-01-02 4 views
0

Sagen wir, es gibt einen Redis - Hash, der 10 Schlüsselwerte hat. Ich lese sie alle in einen Perl-Hash (oder jede Sprachenkarte/Hash/Dict) und muss 3 der Werte aktualisieren. Jetzt habe ich die 3 Werte im Hash geändert und muss es wieder in redis schreiben. unter (A) & (B) welche wird schneller sein?Redis - hmset() in Hash - Effizienz

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

oder

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

Was ich versuche, ist zu betrachten: (A) ist eine Kommunikation mit 10 Elementen Redis. Aber redis muss nur 3 von ihnen aktualisieren. Vergeudet die Wiederverwendung Zeit, auch wenn Werte nicht geändert werden? (B) ist drei Kommunikationen mit 1 Element zu rediszieren.

Antwort

2

Am schnellsten wäre es, eine einzige HMSET zu senden, die nur die aktualisierten Felder und ihre jeweiligen Werte enthält. Redis wird nur diese Felder aktualisieren und nichts mit den nicht explizit erwähnten tun.

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

+1. Aber mehr von meinen Zweifeln ist "Werde ich diese unveränderten Werte in Haschisch wieder ignorieren?" . Ansonsten muss ich die geänderten in Perl durchgehen und notieren (C). –

+0

wird sie nicht ignoriert, so dass sie auf den gleichen Wert aktualisiert werden, der in Bezug auf Netzwerk und CPU verschwenderisch ist - bereite einfach einen Hash vor, der nur aus den Änderungen besteht und sende ihn. –