NodeJS Redis监听器

是否有可能在nodejs中侦听来自redis的更改的值事件?

情况:我有一个NodeJS应用程序,它显示来自另一个应用程序(同一台服务器上的原生应用程序,让我们调用它,让我们调用节点应用程序栏)的实时数据。

Foo将机器状态保存在redis键“状态”中。 栏注册并显示它。 你怎么能抓住这个事件?

编辑 Pierres解决scheme正常工作获取键,但我如何检索值? 我试过这样,但是一个parseError发生:

var redis = require("redis"); var client_redis = redis.createClient(); client_redis.config('set', 'notify-keyspace-events', 'KEA'); client_redis.subscribe('__keyevent@0__:set'); client_redis.on('message', function(channel, key) { client_redis.get(key, function(error, result) { if (error) console.log(error); else console.log(result); }); }); 

错误

 $ { ReplyError> at parseError (/home/pi/Website/node_modules/redis-parser/lib/parser.js:181:12) -bash: syntax error near unexpected token `(' 

编辑#2

看起来像client_redis.subscribe('...')阻止客户端读取值到相应的键。 我添加了第二个读取值的客户端。

工作示例:

 var redis = require("redis"); // Client for subscription var subscriptionClient = redis.createClient(); // Client for reading the values from the keys. var readClient = redis.createClient(); subscriptionClient.config('set', 'notify-keyspace-events', 'KEA'); // subscribe to the key event so we get notificated if a value changes subscriptionClient.subscribe('__keyevent@0__:set'); subscriptionClient.on('message', function(channel, key) { readClient.get(key, function(err, value) { console.log(value); }); }); 

对的,这是可能的。 您需要使用Redis Keyspace通知 。

特别参见由不同命令部分产生事件 。 您可能希望在使用SET命令时收到通知:

 var redis = require('redis'); var client_redis = redis.createClient(); // enable notify-keyspace-events for all kind of events (can be refined) client_redis.config('set','notify-keyspace-events','KEA'); client_redis.subscribe('__keyevent@0__:set'); // you can target a specific key with a second parameter // example, client_redis.subscribe('__keyevent@0__:set', 'mykey') client_redis.on('message', function(channel, key) { // do what you want when a value is updated });