2017-03-22 4 views
0

Ich konvertiere einen Code, der hashmaps verwendet, um zu redis. Ich bin auf ein Problem gestoßen, als ich versuchte, die Hashmap-Funktion .values ​​() zu duplizieren.Node.js Redis bekomme alle Werte in einer hashmap

Mit Hashmaps:

var hTest = new HashMap(); 
hTest.set('1','hello'); 
hTest.set('2','world'}); 
console.log(hTest.values()); 

Ausgänge: [ 'hallo', 'Welt']

Aber Redis scheint nicht ein Äquivalent zu haben. Closest ich gefunden habe, war:

client.hset("rTest", "1", 'hello'); 
client.hset("rTest", "2", 'world'}); 
client.hgetall("rTest",function(err, values){ 
    console.log(values) 
}); 

Ausgänge { ‚1‘, ‚hallo‘, ‚2‘, ‚Welt‘}

Ich weiß, dass ich eine for-Schleife und Zyklus durch die Antwort erstellen kann, aber ich Ich hoffe, es gibt einen Befehl ähnlich dem hashmap.values ​​().

Antwort

2

Sie können HVALS Befehle verwenden, um alle Werte im Hash abzurufen. Wenn der Hash sehr groß ist, ist es immer eine schlechte Idee, HVALS oder HGETALL zu rufen. Es kann Redis für eine lange Zeit blockieren, da Redis single-threaded ist.

Stattdessen können Sie HSCAN verwenden, um den Hash inkrementell zu iterieren. Und das sollte der empfohlene Weg sein, um alle Werte eines großen Hash zu erhalten.

+0

Vielen Dank. Die Karten, mit denen ich es zu tun habe, sollten niemals sehr groß werden, höchstens ein paar Werte, damit HVALS funktioniert. (Ich bin mir sicher, dass ich mich selbst verhext habe und diese Karte wird jetzt auf ein paar Millionen Datensätze wachsen) – Woodsy