当前位置: 首页 > news >正文

redis实现定期关单

在SpringBoot项目中,实现订单超过24小时过期并自动关单,常见有以下几种方案,我会逐一说明,并给出推荐实现:

✅ 推荐方案:使用 延迟队列(DelayQueue) 或 消息队列(如RabbitMQ延迟消息)

方案1:使用 Redis + 延迟队列(Redisson延迟队列)

优点: 高性能、易扩展、适合分布式系统
实现步骤:
  1. 引入Redisson依赖:
xml
复制
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.4</version>
</dependency>
 
  1. 下单时,将订单ID加入延迟队列,延迟时间为24小时:
java
复制
RDelayedQueue<String> delayedQueue = redissonClient.getDelayedQueue("orderDelayQueue");
delayedQueue.offer(orderId, 24, TimeUnit.HOURS);
 
  1. 启动一个监听线程,消费延迟队列:
java
复制
RQueue<String> queue = redissonClient.getQueue("orderDelayQueue");
RDelayedQueue<String> delayedQueue = redissonClient.getDelayedQueue(queue);new Thread(() -> {while (true) {try {String orderId = queue.take(); // 阻塞等待过期订单// 查询订单状态,如果未支付,则关单Order order = orderService.getById(orderId);if (order != null && "UNPAID".equals(order.getStatus())) {orderService.closeOrder(orderId);log.info("订单已关闭:{}", orderId);}} catch (InterruptedException e) {Thread.currentThread().interrupt();break;}}
}).start();
http://www.rkmt.cn/news/11680.html

相关文章:

  • 详细介绍:5G nr频段_5g哪个信道信号强
  • trae 配置mysql_mcp
  • 【cv】cycleGAN代码解析:train.py
  • 深入解析:李宏毅2023机器学习作业 HW01实操
  • 自定义制作docker容器自动自愈容器镜像
  • 如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据?
  • 第一次编码器测试
  • 04-FreeRTOS的概述及编程规范
  • Linux安装Kafka(无Zookeeper模式)保姆级教程,云服务器安装部署,Windows内存不够允许看看
  • 实用指南:在 CentOS 中安装 MySQL
  • 卫星时间同步平台:助力分布式测控系统同步工作
  • C# Avalonia 15- Animation- Easing
  • CyberLink ColorDirector Ultra 2026 14.0.5712.0 视频后期调色
  • CF 1053 Div.2
  • haproxy负载均衡 - 详解
  • 豆油
  • linux shell awk 中括号 方括号 分割 []
  • 绩效面谈中的优质提问(一)
  • 从 “纸笔清单” 到全栈引擎:数据填报与类 Excel 控件如何重塑企业效率曲线 - 详解
  • 做题笔记总板
  • 嵌入式铁头山羊STM32-各章节详细笔记-查阅传送门 - 教程
  • 做题笔记6
  • 第17章 Day20-Day21 逆向爬虫之瑞数6
  • Vona ORM分表全攻略
  • 深入解析:设计模式-状态模式详解
  • 如何让百度快速收录网页如何让百度快捷收录网页的方法
  • 061_尚硅谷_算术运算符课堂练习
  • axi 4k边界检测
  • GOSIM 开源出海工作坊:给开源创业者的忠告
  • 一文搞懂Flex弹性布局空间分配规则