延时队列有多种实现方式,可以使用mq来实现,也可以通过redis key过期事件监听来实现。
下面就来一个redis key过期事件监听的demo.
1.先引入redis的依赖。
<dependency>
<artifactId>spring-boot-starter-data-redis</artifactId>
<groupId>org.springframework.boot</groupId>
</dependency>
2.配置redis监听器
@Configuration
public class RedisConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory){
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
3.实现监听处理逻辑
@Component
@Slf4j
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
String expiredKey = message.toString();
log.info("expiredKey:{}", expiredKey);
}
}
4.添加一个有过期时间的key
5. 控制台打印出过期key.
2020-07-24 09:50:25.220 INFO 924 --- [ container-2] c.e.d.config.RedisKeyExpirationListener : expiredKey:a
我们需要在onMessage方法里面实现自己的业务逻辑。
共有条评论 网友评论