gpt4 book ai didi

node.js - NodeJS Redis 监听器

转载 作者:IT王子 更新时间:2023-10-29 06:09:41 25 4
gpt4 key购买 nike

是否可以在nodejs中监听来自redis的改变值事件?

情况:我有一个 NodeJS 应用程序,它显示来自另一个应用程序的实时数据(同一服务器上的 native 应用程序,我们称之为 foo,我们称之为 Node 应用程序 bar)。

Foo 将机器状态保存在redis 键“state”中。 Bar 记录并显示它。您如何捕获此事件?

编辑Pierres Solution 可以很好地获取 key ,但如何检索值?我以这种方式尝试过,但是发生了 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 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
});

关于node.js - NodeJS Redis 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41103305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com