Ich habe zwei redis Kunden, in einer Datei, die ich ein einfaches Skript habe Einstellung und gelöscht Redis Tasten:Redis Schlüsselraum Ereignis nicht abstrahlende
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 der zweiten Datei, habe ich einen Redis-Client als Teilnehmer bedient :
var redis = require("redis");
var subscriber = redis.createClient('6379','127.0.0.1');
const REDIS_PUB_MESSAGE = 'redis_pub_message';
const EVENT_SET = '[email protected]__:set';
const EVENT_DEL = '[email protected]__:del';
const SPACE_SPECIFIC_KEY = '[email protected]__:placeholder set';
const EVENT_SPECIFIC_KEY = '[email protected]__:placeholder set';
const SPACE_SPECIFIC_KEY_set = '[email protected]__:set placeholder';
const EVENT_SPECIFIC_KEY_set = '[email protected]__: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);
}
});
der Schlüssel ‚Platzhalter‘ gesetzt wird, so gibt es einen guten Grund, dass ich keine Ausgabe in der ‚Botschaft‘ Handler bin immer?
Sie haben Recht, das ist das Problem. aber eine Frage zu deiner Antwort - "wenn du auf alle Ereignisse aufpassen willst", versuche ich nicht ungläubig zu sein, aber warum pmessage statt message? Ich sehe derzeit den Zweck von pmessage nicht. –
Nun, wenn Sie nur ein einfaches kanalbasiertes Abonnement verwenden, erhalten Sie nur einen einzigen Nachrichtentyp, da der Kanalname dem Nachrichtentyp entspricht. Wenn Sie beispielsweise \ _ \ _ keyevent @ 0 \ _ \ _: del abonnieren, erhalten Sie nur del-Ereignisse für alle Schlüssel. Wenn Sie auch die anderen Ereignisse benötigen, müssen Sie mehrere Kanäle abonnieren oder ein musterbasiertes Abonnement verwenden. –
Didier, Entschuldigung, ich habe dich nicht ganz verstanden. Und als Antwort scheint es, dass ich in der Lage bin, einen bestimmten Schlüssel zu abonnieren, wie mit der Zeile "const EVENT_SPECIFIC_KEY_del = '__keyevent @ 0 __: del placeholder';" das hört auf den Schlüssel namens "Platzhalter" ... Ich verstehe immer noch nicht den Zweck von Nachricht gegen Nachricht. Wenn ich diese Dichotomie vielleicht verstehen würde, würde ich verstehen, was Sie meinen. –