springboot监听Redis 缓存过期Key 失效事件
1、Redis配置修改
事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 故需要开启 redis 的事件监听与发布
修改 redis.conf 文件(Windows上是redis.windows.conf和redis.windows-service.conf)
notify-keyspace-events Ex
2、 redis的配置类开启 redis过期监听
/**
* 开启 redis过期监听
* @param connectionFactory
* @return
*/
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
3、定义 key过期监听器,继承 KeyExpirationEventMessageListener
@Slf4j
@Component
public class RedisListener extends KeyExpirationEventMessageListener {
public RedisListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 针对redis缓存数据失效事件,进行后续数据处理
*
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
/** key ,会把key返回,而不会将value返回*/
String expiredKey = message.toString();
log.info("过期缓存key:" expiredKey);
try {
//登陆信息过期 若expiredKey以login开始则打印log
if (expiredKey.startsWith("login")){
log.info("---------redis 过期缓存处理");
}
} catch (Exception e) {
log.info("---------redis 过期缓存处理 异常---------");
e.printStackTrace();
}
}
}
通过开启key过期的事件通知,当key过期时,会发布过期事件;我们定义key过期事件的监听器,当key过期时,就能收到回调通知。
注意:
1)由于Redis key过期删除是定时 惰性,当key过多时,删除会有延迟,回调通知同样会有延迟。
2)回调通知是一次性的,没有ack机制,若收到通知后处理失败,将不再收到通知。
3)回调通知只能拿到key,拿不到value。
使用场景:
1)可以实现延时队列
消息作为key,将需要延迟的时间设置为key的TTL,当key过期时,在监听器收到通知,达到延迟的效果。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhikkc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01