Redis监听Key失效
之前我使用过使用Redisson这种Redis的框架实现过延时发送。今天突然好奇,在SpringBoot中,Redis能监听到Key失效事件吗?经过查资料,答案是肯定的,可以监听Key失效,但是有缺陷,监听事件里面只能拿到Key,不能拿到这个Key对应的Value。所以说,在生成这个Key的时候,需要把这个Key对应的Value存放到数据库中,以便在失效事件中再去查询一下数据库。
Redis的Key失效事件在SpringBoot中可以做一些订阅功能,比如延时发送邮件等。
配置的话像下面一样就好了。
@Configuration
public class RedisConfig ....
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
消费端
@Component
public class RedisExpiredListener extends KeyExpirationEventMessageListener ...
private static final String ORDER_PREFIX = "Order:";
public RedisExpiredListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
//获取失效的key
String expiredKey = message.toString();
if (expiredKey.startsWith(ORDER_PREFIX)) {
//如果是Order:开头的key,消费Key
LOGGER.info("消费Key:{}", message);
//someService.findDataByKey(key);
//do something ...
}
}
}
你看我都这么努力的分享知识给你了,鼓励一下又何妨O(∩_∩)O
大宇期待与你们共同进步!同时也非常感谢最近兄弟们的支持!