我有两个redis客户端,在一个文件中我有一个简单的脚本设置并删除了Redis键:
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",redis.print); client.set("placeholder","placeholder value",redis.print); client.del("string key 1",redis.print); client.del("string key",redis.print);
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:',key); case EVENT_SPECIFIC_KEY: console.log('space specific key channel:',key); case SPACE_SPECIFIC_KEY: console.log('event specific key channel:',key); } });
关键的’占位符’正在设置,所以有没有什么好的理由我没有在’message’处理程序中获得任何输出?
解决方法
您忘记将订阅者客户端订阅到特定频道.此外,如果要监视所有事件,则需要使用基于模式的订阅.
您可能想要做这样的事情(未经测试):
subscriber.on("pmessage",function (pattern,message) { console.log("("+ pattern +")" + " client received message on " + channel + ": " + message); switch (channel) { // blah blah blah // ... } }); subscriber.psubscribe(''__key*__:*')
请参阅Redis documentation和node_redis examples中的更多信息.
更新:
这是一个例子来说明频道订阅和模式订阅之间的区别.为简洁起见,省略了适当的错误处理.
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',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,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",function( err ) { client.del("anotherkey"); }); }); }); }); } // Here we go S1( function () { S2( function () { do_something(); }); });
该脚本的结果是:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。