您忘记了订阅用户客户端订阅特定的频道。此外,如果要监视所有事件,则需要使用基于模式的订阅。
您可能想要执行以下操作(未测试):
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 mykeyfunction 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 keysfunction 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 anotherkeyfunction 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 goS1( function () { S2( function () { do_something(); });});该脚本的结果是:
S1: received on __keyspace@0__:mykey event setS2: received on __keyspace@0__:mykey event setS2: received on __keyspace@0__:mykey event setS1: received on __keyspace@0__:mykey event setS1: received on __keyspace@0__:mykey event delS2: received on __keyspace@0__:mykey event delS2: received on __keyspace@0__:anotherkey event setS2: received on __keyspace@0__:anotherkey event del
您可以看到第一个订阅者仅接收了mykey事件,而第二个订阅者接收了所有关键字事件。



