Node.js, (Hi) Redis und der Multi-Befehl

8

Ich spiele mit node.js und redisiere und installiere die mentsis-Bibliothek mit diesem Befehl

%Vor%

Ich habe mir die verschiedenen Beispiele hier angesehen:

Ссылка

In Zeile 17 heißt es

%Vor%

Dies bedeutet, dass das interne multi.queue-Objekt nie gelöscht wird, sobald die Befehle beendet sind.

Meine Frage ist: Wie würden Sie mit der Situation in einer http-Umgebung umgehen? Zum Beispiel das Verfolgen des letzten verbundenen Benutzers (dies benötigt nicht wirklich multi, da es nur einen Befehl ausführt, aber es ist einfach zu folgen)

%Vor%

In diesem Fall würde multi.exec eine Transaktion für den ersten verbundenen Benutzer und 100 Transaktionen für den 100. Benutzer ausführen (weil das interne multi.queue-Objekt niemals gelöscht wird).

Option 1: Soll ich das multi-Objekt innerhalb der http.createServer-Callback-Funktion erstellen, die es am Ende der Ausführung der Funktion effektiv beenden würde? Wie teuer in Bezug auf CPU-Zyklen wäre das Erstellen und Zerstören dieses Objekts?

Option 2: Die andere Option wäre, eine neue Version von multi.exec () zu erstellen, etwas wie multi.execAndClear (), das die Warteschlange löscht, sobald sie erneut ausgeführt wird Bündel von Befehlen.

Welche Option würden Sie wählen? Ich nehme an, dass Option 1 besser ist - wir töten ein Objekt, anstatt Teile davon herauszupicken - ich möchte nur sicher sein, dass ich sowohl für Knoten als auch für JavaScript brandaktuell bin.

    
nightowl 11.02.2011, 15:20
quelle

1 Antwort

13

Die Multiobjekte in node_redis sind sehr kostengünstig zu erstellen. Als Nebeneffekt dachte ich, es würde Spaß machen, sie wiederverwenden zu lassen, aber das ist offensichtlich nur unter bestimmten Umständen nützlich. Gehen Sie voran und erstellen Sie jedes Mal ein neues Multiobjekt, wenn Sie eine neue Transaktion benötigen.

Beachten Sie, dass Sie multi nur verwenden sollten, wenn Sie alle Operationen benötigen, die atomar im Redis-Server ausgeführt werden sollen. Wenn Sie nur eine Reihe von Befehlen effizient bündeln möchten, um Netzwerkbandbreite zu sparen und die Anzahl der zu verwaltenden Callbacks zu reduzieren, senden Sie einfach die einzelnen Befehle nacheinander. node_redis leitet diese Anfragen automatisch der Reihenfolge nach an den Server weiter, und die einzelnen Befehlsrückrufe, sofern vorhanden, werden der Reihe nach aufgerufen.

    
Matt Ranney 01.03.2011 06:56
quelle

Tags und Links