Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Zdarzenie przestrzeni klucza Redis nie uruchamia się

Zapomniałeś zasubskrybować klienta subskrybenta na konkretny kanał. Ponadto, jeśli chcesz oglądać wszystkie wydarzenia, musisz skorzystać z subskrypcji opartej na wzorach.

Możesz zrobić coś takiego (nieprzetestowane):

subscriber.on("pmessage", function (pattern, channel, message) {
    console.log("("+  pattern +")" + " client received message on " + channel + ": " + message);
    switch (channel) {
        // blah blah blah
        // ...
    }
});
subscriber.psubscribe(''__key*__:*')

Zobacz więcej informacji w dokumentacji Redis oraz w przykładach node_redis.

Aktualizacja:

Oto przykład ilustrujący różnicę między subskrypcją kanału a subskrypcją wzorca. Właściwa obsługa błędów została pominięta ze względu na zwięzłość.

var redis = require("redis");

var client = redis.createClient('6379','127.0.0.1');
var subscriber1 = redis.createClient('6379','127.0.0.1');
var subscriber2 = redis.createClient('6379','127.0.0.1');

// First subscriber listens only to events occurring for key mykey
function S1(next) {
    subscriber1.on('message', function(channel, msg) {
        console.log( "S1: received on "+channel+" event "+msg )
    });
    subscriber1.subscribe( "[email protected]__:mykey", function (err) {
        next();
    });
}

// Second subscriber listens to events occuring for ALL keys
function S2(next) {
    subscriber2.on('pmessage', function(pattern,channel, msg) {
        console.log( "S2: received on "+channel+" event "+msg )
    });
    subscriber2.psubscribe( "[email protected]__:*", function (err) {
        next();
    });
}

// Do something with keys mykey and anotherkey
function do_something() {
    client.set("mykey","example", function( err ) {
        client.set("mykey", "another example", function( err ) {
            client.del("mykey", function( err ) {
                client.set("anotherkey","example", function( err ) {
                    client.del("anotherkey");
                });
            });
        });
    });
}

// Here we go
S1( function () {
    S2( function () {
        do_something();
    });
});

Wynik tego skryptu to:

S1: received on [email protected]__:mykey event set
S2: received on [email protected]__:mykey event set
S2: received on [email protected]__:mykey event set
S1: received on [email protected]__:mykey event set
S1: received on [email protected]__:mykey event del
S2: received on [email protected]__:mykey event del
S2: received on [email protected]__:anotherkey event set
S2: received on [email protected]__:anotherkey event del

Możesz zobaczyć, że pierwszy subskrybent otrzymał tylko zdarzenia dla mykey, podczas gdy drugi subskrybent otrzymał zdarzenia dla wszystkich kluczy.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. dial tcp [::1]:6397:connectex:nie można nawiązać połączenia, ponieważ komputer docelowy aktywnie je odrzucił

  2. Wieloparametrowa wyszukiwarka meczów z Redis

  3. Redis Stack Exchange, jak usuwać lub pobierać klucze według wzorca

  4. Docker&Celery - BŁĄD:Pidfile (celerybeat.pid) już istnieje

  5. Anuluj oferty pracy w Laravel