在Node.js中,是否可能监听来自Redis的更改值事件?
情境: 我有一个NodeJS应用程序,它显示来自另一个应用程序(在同一台服务器上的本机应用程序,称其为"foo",并将节点应用程序称为"bar")的实时数据。
"Foo"将机器状态保存在Redis键"state"中。"Bar"注册并显示它。如何捕获此事件?
编辑: Pierre的解决方案可以很好地获取键,但是如何检索值呢?我尝试了这种方式,但是出现了解析错误:
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);
});
});