需求
在写项目时有一个需求,当 Redis 中某缓存过期时,进行相应的业务逻辑。
配置 Redis 的监听器
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
自定义监听器
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
// 此值就是过期的 key 值
String key = message.toString();
System.out.println("过期的 key:" + key);
// 如果 key 为指定的 key 则进行操作
if (RedisEnum.EXAMINATION_PAPER.getValue().equals(key)) {
System.out.println("指定缓存过期");
}
}
}
测试
@RestController
public class ExaminationController {
@Resource
private RedisUtil redisUtil;
/**
* 设置一个有过期时间的 key
*/
@GetMapping("examinationPaper")
public boolean examinationPaper(Integer time) {
// 先添加 key,再设置过期时间
redisUtil.set(RedisEnum.EXAMINATION_PAPER.getValue(), "666");
return redisUtil.expire(RedisEnum.EXAMINATION_PAPER.getValue(), time);
}
/**
* 查看 key 的过期时间
*/
@GetMapping("time")
public long time() {
return redisUtil.getExpire(RedisEnum.EXAMINATION_PAPER.getValue());
}
}
标题:Redis 实现过期 key 事件监听
作者:Yi-Xing
地址:http://47.94.239.232/articles/2021/03/09/1615298071495.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!