我想听听Redis的过期事件。我已经在我的redis.conf
上配置了notify-keyspace-events "AKE"
,这是我在node上的代码:
const redis = require('redis');
const client = redis.createClient();
const subscriber = redis.createClient();
const KEY_EXPIRING_TIME = 10; // seconds
client.setex('myKey', KEY_EXPIRING_TIME, 'myValue');
subscriber.on('message', function(channel, msg) {
console.log( `On ${channel} received ${msg} event`);
});
subscriber.subscribe('myKey', function (err) {
console.log('subscribed!');
});
我希望在10秒内看到事件被触发。setex命令工作正常,在10秒钟内密钥不在数据库中,我在尝试捕获事件时遇到了问题。
我做错了什么?
4条答案
按热度按时间7rtdyuoh1#
实际上,可以使用订阅的客户端监听特定通道(
'__keyevent@db__:expired'
)的“过期”类型keyevent notification,并监听其 message 事件。不需要setInterval / setTimeout或其他库
概念验证(工作:使用 NodeJS v.9.4.0)
dbf7pr2w2#
方法1:-
需要使用setInterval函数定期检查该值是否过期。我知道这不等于倾听事件。但是,它间接地达到了目的。
下面的代码每5秒检查一次该值。
方式二:-
redis-notifier
可用于监听事件。但是,它需要Python〉= v2。5.0 &〈3.0。0以安装此软件包。redis-notifier
cunj1qz13#
不需要setInterval / setTimeout或其他库
您可以从下面的代码中获取所有过期的密钥。
**注意:**此代码使用redis@4.0.0测试
oaxa6hgo4#
使用此代码段并授予所有必要的权限,您的代码将正常工作。