Redis Keyless Event

I have two redis clients, in one file I have a simple script parameter and the Redis keys are removed:

var redis = require("redis"); var client = redis.createClient('6379','127.0.0.1'); client.config("SET","notify-keyspace-events", "KEA"); client.set("string key 1", "string val", redis.print); client.set("string key 2", "string val", redis.print); client.set("placeholder","placeholder value", redis.print); client.del("string key 1", redis.print); client.del("string key", redis.print); 

in the second file, I have a Redis client acting as a subscriber:

 var redis = require("redis"); var subscriber = redis.createClient('6379','127.0.0.1'); const REDIS_PUB_MESSAGE = 'redis_pub_message'; const EVENT_SET = ' __keyevent@0 __:set'; const EVENT_DEL = ' __keyevent@0 __:del'; const SPACE_SPECIFIC_KEY = ' __keyspace@0 __:placeholder set'; const EVENT_SPECIFIC_KEY = ' __keyevent@0 __:placeholder set'; const SPACE_SPECIFIC_KEY_set = ' __keyspace@0 __:set placeholder'; const EVENT_SPECIFIC_KEY_set = ' __keyevent@0 __:set placeholder'; subscriber.on('message', function(channel, key) { switch (channel) { case SPACE_SPECIFIC_KEY_set: console.log('space specific key channel:',channel,'key:',key); case EVENT_SPECIFIC_KEY_set: console.log('event specific key channel:',channel,'key:',key); case EVENT_SPECIFIC_KEY: console.log('space specific key channel:',channel,'key:',key); case SPACE_SPECIFIC_KEY: console.log('event specific key channel:',channel,'key:',key); } }); 

the "placeholder" of the key is set, so is there a good reason why I do not get any output in the message handler?

+6
source share
1 answer

You forgot to subscribe to a subscriber client on a specific channel. In addition, if you want to keep track of all the events, you need to use a template-based subscription.

You might want to do something like this (untested):

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

See the Redis documentation and edit nodes for more information .

Update:

Here's an example to illustrate the difference between a channel subscription and a template subscription. Correct error handling omitted for brevity.

 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( " __keyspace@0 __: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( " __keyspace@0 __:*", 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(); }); }); 

The result of this script is:

 S1: received on __keyspace@0 __:mykey event set S2: received on __keyspace@0 __:mykey event set S2: received on __keyspace@0 __:mykey event set S1: received on __keyspace@0 __:mykey event set S1: received on __keyspace@0 __:mykey event del S2: received on __keyspace@0 __:mykey event del S2: received on __keyspace@0 __:anotherkey event set S2: received on __keyspace@0 __:anotherkey event del 

You can see that the first subscriber received only events for mykey, and the second subscriber received events for all keys.

+13
source

Source: https://habr.com/ru/post/985820/


All Articles