应用场景 (举一个商城项目的栗子)
提交订单后, 把订单保存到表后, 也把订单的id放到redis中, 失效时间30分钟, 若30分钟内未付款, 则添加库存, 修改订单状态等等业务逻辑
单机版使用DelayQueue解决方法 点击查看
注入 RedisMessageListenerContainer
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
监听器
@Component
public class KeyExpiredListener extends KeyExpirationEventMessageListener {
@Autowired
public RedisTemplate<String, String> redisTemplate;
public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
// 有key失效就会调用message方法 返回key
@Override
public void onMessage(Message message, byte[] bytes) {
String key = new String(message.getBody(), StandardCharsets.UTF_8);
// 业务逻辑
}
}