最近幾天進一步了解了一下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(); // 后面實現業務即可
} }