Spring boot实现监听Redis key过期事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring boot实现监听Redis key过期事件相关的知识,希望对你有一定的参考价值。
参考技术A 大家经常会遇到这样的场景,比如订单15分钟内支付,超时未支付则需要取消订单,这种取消订单的任务只会执行一次。常规的做法有使用定时任务轮训订单列表,但是假设没有正在支付的订单,那么轮训的定时任务会给占用服务器资源;如果定时任务设置间隔时间较长,则会出现超过15分钟取消的情况;
其实,可以使用redis订阅/发布功能,完美的利用redis的过期key通知服务器,进行超时订单取消;
在redis.conf配置文件中,修改属性项
重启redis服务,利用下面的命令,就可以在客户端监听过期key的事件
接下来用spring boot实现
控制台输出结果
从上面的例子可以看到,已经成功获取到了过期的key,接下来我们可以加入订单编号,进行取消订单的业务逻辑;
spring boot 使用redis进行发布订阅
异步消息的方式有很多,这篇博客介绍如何使用redis进行发布订阅,
完成这个示例只需要三个文件
1.redis消息监听配置
@Configuration
public class RedisListenerConfig {
/**
* redis消息监听器容器
* 可以添加多个监听不同话题的redis监听器,只需要把消息监听器和相应的消息订阅处理器绑定,该消息监听器
* 通过反射技术调用消息订阅处理器的相关方法进行一些业务处理
* @param connectionFactory
* @param listenerAdapter
* @return
*/
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter
) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
//可以添加多个 messageListener
container.addMessageListener(listenerAdapter, new PatternTopic("index"));
return container;
}
/**
* 消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法
* @param redisReceiver
* @return
*/
@Bean
MessageListenerAdapter listenerAdapter(RedisReceiver redisReceiver) {
System.out.println("消息适配器进来了");
return new MessageListenerAdapter(redisReceiver, "receiveMessage");
}
//使用默认的工厂初始化redis操作模板
@Bean
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
return new StringRedisTemplate(connectionFactory);
}
}
2.消息处理
@Service
public class RedisReceiver {
public void receiveMessage(String message) {
System.out.println("消息来了:"+message);
//这里是收到通道的消息之后执行的方法
}
}
3.一个发送消息的定时器
//定时器
@EnableScheduling
@Component
public class TestSenderController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
//向redis消息队列index通道发布消息
@Scheduled(fixedRate = 3000)
public void sendMessage(){
stringRedisTemplate.convertAndSend("index",String.valueOf(Math.random()));
}
}
运行结果如图
本篇博客地址:https://gitee.com/zhao-baolin/redis-message
以上是关于Spring boot实现监听Redis key过期事件的主要内容,如果未能解决你的问题,请参考以下文章