Redis过期时触发的回调实现效果(redis过期时触发回调)

2023-05-10 19:07:38 过期 触发 回调

Redis过期时触发的回调实现的效果是在Redis的某个键值对设置了失效时间之后,Redis在它失效的时候触发一个回调,从而实现额外的处理逻辑。这种能力在很多场景中都很有用,比如限制用户登录失败次数过多提前被禁用,实现session管理等。

Redis给出的实现方案是使用keyspace notifications,它可以在redis键设置过期时间后触发一个事件,通过监听这个事件,就可以做一些自定义的操作。假设redis-cli是已经连接到服务器的客户端,我们可以使用下面的命令来开启keyspace notifications 的功能:

`redis-cli config set notify-keyspace-events Ex`

这条命令将会开启观察所有键的出生及其过期。当然,我们也可以指定某个前缀的keyspace来控制仅监视特定key的生存和失效情况,不过这里就不展开了。接下来,下面的代码展示了如何监听redis的keyspace notifications:

// 引入模块
const redis = require('redis');

// 连接到redis服务
const client = redis.createClient({host: '127.0.0.1', port: 6379});
// 设置需要监听的keyspace
client.config('set','notify-keyspace-events','Ex');
// 监听事件
client.on('pmessage', function(pattern, event, channel) {
console.log('pattern: ', pattern);
console.log('event: ', event);
console.log('channel: ', channel);
});
// 开始监听
client.psubscribe('__keyevent@0__:expired');

上面的代码中,先告诉redis服务器开启观察“expired”类型的keyspace notifications,然后使用psubscribe命令监听__keyevent@0__:expired,每当有key失效时,就会发出一个pmessage类型的事件,最后在“pmessage”事件处理程序中可以得到:通道、事件名称、以及匹配的Pattern。有了这些信息,就可以实现我们在这里想要的效果,比如:当session失效时,清理对应的客户端信息等。

Redis过期时触发的回调实现的效果就是当某个Redis键设置以后,当它失效时触发一个特定的回调,实现特定的业务逻辑,而实现该逻辑的关键就是使用keyspace notifications功能以及监听pmessage事件,只要按照上面给出的那样实现,就可以实现我们想要的操作。

相关文章