首先需要修改redis配置文件
打开redis配置文件,找到notify- keyspace- events “EX”
默认会是注掉的,下面会有一个notify- keyspace- events “”
这个是没有注掉的,直接将notify- keyspace- events “”注掉,再将notify- keyspace- events “EX”的注释放开即可;
修改为这个样子就可以了
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
编写代码
消息处理类
package com.mood.Utils;
import org.springframework.stereotype.Component;
@Component
public class RedisMessageReceiver {
/**
* 接收redis消息,并处理
*
* @param message 过期的redis key
*/
public void receiveMessage(String message) {
System.out.println("通知的key是:" + message);
}
}
然后是设置监听频道,这在redis配置类中设置
@Resource
RedisConnectionFactory factory;
/**
* redis 订阅频道
*
* //RedisConnectionFactory connectionFactory
* @param listenerAdapter
* @return
*/
@Bean
public RedisMessageListenerContainer container(MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(factory);
// 订阅通道,key过期时通知
container.addMessageListener(listenerAdapter, new PatternTopic("__keyevent@0__:expired"));
container.addMessageListener(listenerAdapter, new PatternTopic("__keyevent@1__:expired"));
// 可以订阅多个通道
return container;
}
/**
* 配置redis事件监听处理器
*
* @param receiver
* @return
*/
@Bean
public MessageListenerAdapter listenerAdapter(RedisMessageReceiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
这样就可以监听到订阅的数据库中的过期键了,后续可以在消息处理类中对过期键进行处理。