最近几天进一步了解了一下redis,发现了key的过期监听功能,实现方式如下:
在redis的配置文件 redis.conf 中找到"EVENT NOTIFICATION"模块, 解开注释 notify-keyspace-events Ex ;或者在这个模块后增加 notify-keyspace-events Ex 。 来开启key的过期监听, 因为redis默认是关闭的。
然后在spring boot 项目中添加配置类代码如下:
@Configuration public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
然后新增key的监听类继承 KeyExpirationEventMessageListener ,并重写 有参构造和onMessage方法, 注意onMessage方法并不是KeyExpirationEventMessageListener 类的方法,而是 KeyExpirationEventMessageListener 的父类KeyspaceEventMessageListener的方法,如果不想重写此方法那么可以重写KeyExpirationEventMessageListener 的方法doHandleMessage方法也是可以的。代码如下:
@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
@Autowired
private RiskService riskService;
@Autowired
private OrderService orderService;
public RedisKeyExpirationListener(RedisMessageListenerContainer
listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
// 此值就是key值
String key = message.toString();
// 后面实现业务即可
}
}