Auf Änderungen in Redis warten?

8

Ich möchte einen Rückruf ausführen können, wenn Änderungen in meiner Redis-Sammlung vorgenommen werden. Der Rückruf würde den Schlüssel und den Wert als Eingaben annehmen. Ist so etwas möglich?

Danke?

    
fancy 20.05.2012, 20:31
quelle

5 Antworten

8

Sie können auch mit dem Befehl sync eine Verbindung zum Redis-Server wie ein Slave herstellen. Eine schnelle Einführung finden Sie unter Wie Redis Replication? .

Die Ausgabe des Sync-Befehls hat zwei Phasen. In der ersten Phase gibt der Server die Datenbank dump.rdb zurück. Sobald die Datei gesendet wurde, beginnt sie, Befehle im Redis-Protokoll zu senden, das ebenfalls das AOF-Format ist.

Hier ist das Bild von dem, was Sie tun können:

  1. Verbinden Sie sich mit dem Redis-Server und geben Sie den SYNC -Befehl
  2. aus
  3. Speichern und analysieren Sie die Datei dump.rdb. Erstellen Sie den anfänglichen Datensatz. Ein node.js-basierter rdb-Parser ist verfügbar
  4. Analysiere die folgenden Befehle. Da sie sich im Redis-Protokoll befinden, können Sie mit einer vorhandenen Redis-Bibliothek beginnen.
  5. Rufen Sie für jeden empfangenen Befehl einen Rückruf
  6. auf

Es scheint eine Menge Arbeit zu sein, aber Sie sollten in der Lage sein, dies ziemlich leicht zu hacken. Und es wäre auch eine gute Open-Source-Bibliothek!

BEARBEITEN: Synchronisieren v / s Monitor

  1. Monitor ist ein Debugging-Befehl. Das Antwortformat kann (und hat) sich im Laufe der Zeit ändern. Sync wird für Master verwendet - & gt; Slave-Replikation, und so wird besser unterstützt
  2. Monitor gibt alle Befehle aus, einschließlich schreibgeschützter Befehle. Sync wird nur Befehle erhalten, die Daten ändern.
  3. Monitor protokolliert einzelne Befehle, die in einem Lua-Skript ausgeführt werden. Sync überträgt nur das gesamte Lua-Skript, sodass Sie das Skript selbst analysieren müssen. Dies ist in der Tat ein Deal Breaker für sync .
  4. Monitor protokolliert Befehle, die nicht erfolgreich waren, Sync protokolliert nur Befehle, die Daten ändern. Zum Beispiel wird der Befehl del non-existing-key vom Monitor protokolliert, aber nicht angezeigt, wenn Sie sync.
  5. ausführen
Sripathi Krishnan 21.05.2012, 02:48
quelle
10

Zwei Optionen:

  1. Verwenden Sie den Befehl MONITOR - er verfolgt jeden Befehl, der an Redis gesendet wird, und Sie können analysieren und sehen, wann Sie Sammlung wird berührt.

  2. Wenn Sie den Code besitzen, der in die Sammlung schreibt, signalisieren Sie Ihren anderen Code (Ihren Rückruf). Sie können dafür den Redis Pub / Sub -Kanal verwenden.

BEARBEITEN Redis wird dieses Feature in Version 2.8 implementieren. Siehe dazu den Blogeintrag von Antirez: Redis Schlüsselraum ändert das Benachrichtigungssystem .

    
Ofer Zelig 20.05.2012 20:56
quelle
3

kurze Antwort - nein.

etwas längere Antwort - Sie können es nur tun, wenn Sie Publishing zu einem bestimmten Kanal in Redis PubSub in Ihrem Client hinzufügen. oder Benutzer MONITOR zu analysieren, was auch immer in Redis vorgeht, aber wenn dieser Prozess verliert Verbindung zu redis - Sie sind geschraubt.

    
Not_a_Golfer 20.05.2012 20:57
quelle
0
%Vor%

Wenn Sie Java verwenden. redis-replicator implementiert das Redis Replikationsprotokoll. Weitere Informationen finden Sie unter Referenzen

    
leon chen 06.03.2017 14:00
quelle
0

Im Jahr 2017

Es gibt jetzt einen Publish / Subscribe-Mechanismus, den Sie mit node-redis module verwenden können. Siehe spezifische Dokumentation HIER . (Funktioniert auch mit redis-mock zum Testen)

Sie können mehrere Abonnenten (Listener) für denselben Kanal haben, was in Ihrem Fall der Schlüssel zu Ihrer Sammlung wäre.

Quick Sample: (Details zur Implementierung finden Sie in der obigen Dokumentation)

%Vor%     
Xeltor 18.08.2017 16:32
quelle

Tags und Links