Redis
 sql >> база данни >  >> NoSQL >> Redis

Събитието на ключовото пространство Redis не се задейства

Забравили сте да абонирате абонатния клиент за конкретен канал. Освен това, ако искате да наблюдавате всички събития, трябва да използвате базиран на шаблон абонамент.

Може да искате да направите нещо подобно (нетествано):

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

Вижте повече информация в документацията на Redis и в примерите за node_redis.

Актуализация:

Ето пример за илюстриране на разликата между абонамента за канал и абонамента за шаблон. Правилната обработка на грешки е пропусната за краткост.

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();
    });
});

Резултатът от този скрипт е:

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

Можете да видите, че първият абонат получава само събития за mykey, докато вторият абонат получава събития за всички ключове.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Stackexchange.Redis защо ConnectionMultiplexer.Connect установява две клиентски връзки?

  2. Как мога да чета от Redis в MULTI блок в Ruby?

  3. doRedis връща грешки в Windows 8 x64 за различни компилации на Redis сървър

  4. Редис за изпълнение на конвейер

  5. Docker Redis Connection отказа