FRu*_*les 3 listener redis node.js
是否可以在 nodejs 中侦听来自 redis 的更改值事件?
情况: 我有一个 NodeJS 应用程序,它显示来自另一个应用程序的实时数据(同一服务器上的本机应用程序,我们称之为 foo 并让我们调用节点应用程序栏)。
foo 将机器状态保存在 redis 键“state”中。Bar 注册并显示它。你怎么能捕捉到这个事件?
编辑 Pierres 解决方案可以很好地获取密钥,但如何检索值?我以这种方式尝试过,但是发生了 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);
});
});
Run Code Online (Sandbox Code Playgroud)
错误
$ { ReplyError> at parseError (/home/pi/Website/node_modules/redis-parser/lib/parser.js:181:12) -bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
编辑 #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);
});
});
Run Code Online (Sandbox Code Playgroud)
对的,这是可能的。您需要使用Redis Keyspace Notifications。
请特别查看由不同命令生成的事件部分。您可能希望在使用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
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4975 次 |
| 最近记录: |