2011-02-11 9 views
8

gram około z node.js i REDiS i zainstalowane biblioteki hiredis pomocą tego polecenianode.js (Hi) Redis i multi komenda

npm install hiredis redis 

Spojrzałem na wielu przykładach tutaj:

https://github.com/mranney/node_redis/blob/master/examples/multi2.js

w wierszu 17 mówi

// you can re-run the same transaction if you like 

co oznacza, że ​​int ernal multi.queue obiekt nigdy nie jest usuwany po wykonaniu komend.

Moje pytanie brzmi: jak poradzisz sobie z sytuacją w środowisku http? Na przykład, śledzenie ostatnią podłączonego użytkownika (to naprawdę nie potrzeba wiele, jak to tylko jedno polecenie wykonuje ale jest łatwy do naśladowania)

var http = require('http'); 
redis = require('redis'); 

client = redis.createClient() 
multi = client.multi(); 

http.createServer(function (request, response) { 
    multi.set('lastconnected', request.ip); // won't work, just an example 
    multi.exec(function(err, replies) { 
     console.log(replies); 
    }); 
}); 

W tym przypadku byłoby multi.exec wykonać 1 transakcję za pierwszy podłączony użytkownik i 100 transakcji dla setnego użytkownika (ponieważ wewnętrzny obiekt multi.queue nigdy nie jest czyszczony).

Opcja 1: Czy powinienem utworzyć obiekt multi wewnątrz funkcji wywołania zwrotnego http.createServer, co skutecznie zabiłoby go po zakończeniu wykonywania funkcji? Jak kosztowne pod względem cykli procesorów byłoby tworzenie i niszczenie tego obiektu?

Opcja 2: Inną opcją byłoby stworzenie nowej wersji multi.exec(), coś jak multi.execAndClear(), która będzie wyczyścić kolejkę do Redis chwila wykonany że kilka poleceń.

Którą opcję wybrałbyś? Przypuszczam, że opcja 1 jest lepsza - zabijamy jeden obiekt, zamiast czipu, wybierając jego część - chcę tylko mieć pewność, że jestem nowy dla obu węzłów i javascript.

Odpowiedz

13

Wiele obiektów w node_redis jest bardzo niedrogich do utworzenia. Jako efekt uboczny pomyślałem, że fajnie byłoby pozwolić ci je ponownie wykorzystać, ale jest to oczywiście użyteczne tylko w pewnych okolicznościach. Śmiało i stwórz nowy obiekt wielokrotny za każdym razem, gdy potrzebujesz nowej transakcji.

Jedną z rzeczy, o której należy pamiętać, jest to, że powinieneś używać tylko multi, jeśli rzeczywiście potrzebujesz wszystkich operacji, aby wykonać atomowe na serwerze Redis. Jeśli chcesz tylko wydajnie wydać serię komend, aby oszczędzić przepustowość sieci i zmniejszyć liczbę zwrotów, którymi musisz zarządzać, po prostu wyślij poszczególne polecenia, jedna po drugiej. node_redis automatycznie "potopiuje" te żądania do serwera w kolejności, a poszczególne wywołania zwrotne poleceń, jeśli w ogóle, będą wywoływane w kolejności.

+2

czy możesz wyjaśnić to na przykładzie? –

+0

Ditto na wyjaśnienie. Dokumentacja mówi, że drenuje kolejkę. Biorąc pod uwagę, że możesz ponownie uruchomić komendę i ją powtórzyć, polecenia są bardzo mylące. – maletor

Powiązane problemy