场景题:订单超时自动取消方案设计

为什么需要延时任务

我们来看一下几个非常常见的业务场景:

  1. 某电商平台,用户下单半个小时未支付的情况下需要自动取消订单。
  2. 某媒体聚合平台,每 10 分钟动态抓取某某网站的数据为自己所用。

这些场景往往都要求我们在某指定时间之后去做某个事情,也就是延时去做某个事情。

方案选择

方案类型核心优点核心缺点
定时轮询实现极简、无额外中间件、数据持久化可靠DB 压力大、实时性差、存在资源浪费
Redis ZSet低 DB 压力、支持分布式、查询效率高实时性依赖扫描间隔、需处理分布式锁
MQ 延迟队列秒级实时性、异步解耦、高并发高扩展需 MQ 插件、配置复杂、需处理消息作废
MQ 死信队列基于 MQ 原生特性、无需插件、异常消息隔离实时性略差、超时时间不灵活、消息删除复杂
时间轮算法执行效率极高(O (1))、无全量轮询、短延迟场景响应快单机版易丢任务、分布式改造需依赖 Redis + 锁、仅适配短延迟场景
1.定时轮询

基于 SpringBoot 的 Scheduled 实现,通过定时任务扫描数据库中的订单。详细实现思路:

  1. 任务配置:在 SpringBoot 项目中通过@Scheduled注解配置定时任务,可设置固定频率;(Cron 表达式:是定时任务系统定义执行时间 / 频率的核心,可设置任务按天、按月等规则执行)

  2. 扫描逻辑:任务执行时,执行 SQL 查询数据库中 "创建时间≤当前时间 - 超时阈值(如 30 分钟)且状态为待支付" 的订单;

  3. 取消处理:遍历查询结果,对每个订单先加数据库行锁(FOR UPDATE)防止并发修改,校验订单状态未变更后,执行 "更新订单状态为已取消 + 恢复商品库存" 操作

2.时间轮算法

时间轮算法是一种高效的定时任务调度算法,核心思想类似钟表的表盘:把时间分成固定的 "刻度",每个刻度对应一个待执行的任务列表;通过一个 "指针" 匀速转动,指针走到哪个刻度,就执行该刻度下的所有任务。

以 "订单 30 分钟超时取消" 为例,时间轮的实现流程可以分为 3 步:

第一步:初始化时间轮

  • 设定 1 分钟 1 个刻度、共 60 个刻度(对应 1 小时),用 Map 存 "刻度 - 订单 ID 列表";

  • 启动独立线程让指针每分钟走 1 格,超过 59 就回到 0 循环。

第二步:添加订单任务到时间轮

  • 当用户创建订单时,获取当前时间的分钟数(比如现在是 5 分)。

  • 计算订单要放入的目标刻度:当前分钟 + 超时时间(30 分钟) →5+30=35,如果超过 59 就取模(比如 50+30=80 → 80%60=20)。

  • 把订单 ID 添加到目标刻度的任务列表中,等待指针到达时处理。

第三步:指针转动,处理超时订单

  • 线程每分钟触发一次,指针向前移动 1 格,获取当前指针指向的刻度。

  • 取出该刻度下的所有订单 ID,执行取消逻辑:先加分布式锁(防止多实例重复处理)→ 校验订单状态还是 "待支付" → 更新订单状态为 "已取消" + 恢复商品库存。

  • 处理完成后,清空该刻度的任务列表,避免重复执行。

核心特点

  • 高效:无需轮询全量数据,仅处理当前刻度的到期任务,时间复杂度 O (1);

  • 适用场景:高并发、短延迟(分钟级 / 小时级)的定时任务,如订单超时、红包过期;

  • 注意:分布式场景需结合 Redis 实现时间轮集群同步,避免单机故障丢失任务。

3.Redis Zset

有序集合(Sorted Set):利用有序集合的特性,定时轮询查找已超时的任务。

  1. 数据存储:创建订单时,计算订单超时时间戳(当前时间戳 + 超时时间),将订单 ID 作为member,超时时间戳作为score,存入 Redis 有序集合;

  2. 定时扫描:通过 SpringBoot 定时任务(如每 1 分钟执行一次),执行ZRANGEBYSCORE命令筛选出score ≤ 当前时间戳的订单 ID;

  3. 分布式锁控制:扫描到超时订单 ID 后,先通过 Redis 的SETNX获取分布式锁(如SET lock:order:cancel 1 EX 30 NX),防止多实例重复处理;

  4. 取消处理:持有锁的实例遍历超时订单 ID,校验订单状态后执行取消逻辑,处理完成后通过ZREM命令将订单 ID 从有序集合中移除;

4.MQ 延迟队列
  1. 生产者发消息时,给消息设置延迟时间;

  2. 消息先发送到专门的延迟交换机(通常是x-delayed-message类型);

  3. 延迟交换机不会立即转发消息,而是暂存消息,直到延迟时间到期;

  4. 时间到后,延迟交换机将消息转发到业务队列;

  5. 消费者监听业务队列,到点接收消息并执行 "取消订单" 逻辑。

5.MQ 死信队列
  1. 消息先发送到「无消费者的普通队列」,设置队列 TTL=30 分钟,队列绑定死信交换机;

  2. 消息过期后成为死信,自动路由到死信队列,由消费端处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1149923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

StructBERT中文情感分析镜像发布|开箱即用,支持WebUI与API双模式

StructBERT中文情感分析镜像发布|开箱即用,支持WebUI与API双模式 1. 背景与需求:为什么需要轻量级中文情感分析方案? 在当前AI应用快速落地的背景下,中文文本情感分析已成为客服系统、舆情监控、用户反馈处理等场景中…

从理论到落地:基于GTE镜像的余弦相似度应用全解析

从理论到落地:基于GTE镜像的余弦相似度应用全解析 1. 引言 在自然语言处理(NLP)领域,语义相似度计算是支撑信息检索、智能问答、推荐系统等核心任务的关键技术。传统方法依赖关键词匹配或词频统计,难以捕捉“同义表达…

SAP中为什么我的资产创建时候 选择了成本中心 但折旧分录里面没有成本中心信息 ?

在 SAP 中,资产创建时维护了成本中心但折旧分录未带出,通常是以下原因:1. 资产主数据的 “时间相关” 标签页配置问题虽然你在资产主数据的Time-dependent标签页维护了成本中心,但需要确认:该成本中心的生效时间区间&a…

大学生如何参加CTF?零基础如何入门?

大学生如何参加CTF?零基础如何入门? 前言 最近很多朋友在后台私信我,问应该怎么入门CTF。个人认为入门CTF之前大家应该先了解到底什么是CTF,而你学CTF目的又到底是什么;其次便是最好具备相应的编程能力,若…

ABAWN 是 SAP 资产管理(FI-AA)模块中用于 **“新价值法”** 进行资产价值重估的事务码,核心用于按新评估价值直接更新资产账面价值,适用于特定会计准则或特殊评估场景下的资产价值调整,与

ABAWN 是 SAP 资产管理(FI-AA)模块中用于 **“新价值法”** 进行资产价值重估的事务码,核心用于按新评估价值直接更新资产账面价值,适用于特定会计准则或特殊评估场景下的资产价值调整,与 ABAW(资产负债表重…

构建中文语义搜索的轻量方案|基于GTE向量模型快速实践

构建中文语义搜索的轻量方案|基于GTE向量模型快速实践 1. 引言:为什么需要轻量级中文语义搜索? 在当前AI应用快速落地的背景下,语义搜索已成为智能问答、知识库检索和内容推荐系统的核心能力。然而,许多开发者面临一…

黑客成长第一步:什么是CTF比赛?要怎样才能参加?

‌黑客成长第一步:什么是CTF比赛?要怎样才能参加?CTF比赛入门到进阶的完整学习路线图(2026版) 竞赛形式,其大致流程是,参赛团队之间通过进行攻防对抗、程序分析等形式,从主办方给出…

智能决策支持AI平台可解释性设计:架构师必须掌握的5种方法(含实战案例)

智能决策支持AI平台可解释性设计:架构师必须掌握的5种方法(含实战案例) 目录 引言:智能决策AI的"黑箱"困境与可解释性革命 可解释性基础:核心概念与架构师视角 方法一:模型内在可解释性设计——从根源构建透明决策 方法二:事后解释技术集成——黑箱模型的解释…

AutoGLM-Phone-9B模型深度评测:轻量9B参数下的跨模态表现

AutoGLM-Phone-9B模型深度评测:轻量9B参数下的跨模态表现 随着边缘智能的快速发展,终端侧大模型正从“能跑”向“好用”演进。AutoGLM-Phone-9B作为一款专为移动端优化的90亿参数多模态大语言模型,在视觉、语音与文本三大模态间实现了高效对…

AI万能分类器5分钟上手:预装环境直接运行,比买显卡省90%

AI万能分类器5分钟上手:预装环境直接运行,比买显卡省90% 1. 为什么你需要AI万能分类器? 想象你正在参加大学生AI竞赛,组委会发来的数据集包含上万条需要分类的文本。你的学校机房电脑还是十年前的配置,连打开Excel都…

从文本到语义:构建低延迟中文相似度服务的关键路径|集成GTE镜像实战

从文本到语义:构建低延迟中文相似度服务的关键路径|集成GTE镜像实战 在智能客服、推荐系统和内容去重等场景中,判断两段中文文本是否“意思相近”是一项基础而关键的能力。传统的关键词匹配或编辑距离方法难以捕捉深层语义,而基于…

2026年本科生毕业生高薪专业大洗牌!网络安全稳居榜首

2026年本科生毕业生高薪专业大洗牌!网络安全稳居榜首,微电子、电子科学紧随其后……工科系全面爆发,昔日热门文科何去何从? 工科专业彻底翻身了! 刚刚拿到2024届本科毕业生薪资数据。真的震惊。 高薪专业前十名几乎…

StructBERT中文情感分析镜像发布|支持API调用与可视化交互

StructBERT中文情感分析镜像发布|支持API调用与可视化交互 1. 背景与技术演进:从BERT到StructBERT的中文情感分析革新 自然语言处理(NLP)领域自Google发布BERT(Bidirectional Encoder Representations from Transfor…

万能分类器实战:云端GPU快速处理10万条数据,成本5元

万能分类器实战:云端GPU快速处理10万条数据,成本5元 1. 为什么你需要万能分类器? 想象一下这样的场景:你手头有10万条客户评论需要分类,如果用Excel手动处理,可能需要整整两周时间。而使用AI分类器&#…

GTE中文语义匹配技术解析|附轻量级CPU版镜像实践案例

GTE中文语义匹配技术解析|附轻量级CPU版镜像实践案例 在自然语言处理(NLP)的众多任务中,语义相似度计算是构建智能问答、推荐系统、文本去重等应用的核心基础。传统的关键词匹配方法难以捕捉“我爱吃苹果”与“苹果很好吃”之间的…

TOGAF 源于美国国防部 TAFIM 框架,由 The Open Group 自 1993 年启动研发,1995 年发布 1.0 版,历经技术版、企业版、9.x 迭代至 2022 年的 10 版,已

TOGAF 源于美国国防部 TAFIM 框架,由 The Open Group 自 1993 年启动研发,1995 年发布 1.0 版,历经技术版、企业版、9.x 迭代至 2022 年的 10 版,已成为全球主流企业架构标准,核心演进路径是从技术架构向全企业架构扩展…

从模型到部署:AutoGLM-Phone-9B图文语音融合推理全流程指南

从模型到部署:AutoGLM-Phone-9B图文语音融合推理全流程指南 1. AutoGLM-Phone-9B 多模态模型核心价值与应用场景 随着端侧AI能力的持续演进,如何在资源受限的移动设备上实现高效、低延迟的多模态推理成为行业关键挑战。AutoGLM-Phone-9B 正是在这一背景…

中文语义相似度计算实战|基于GTE轻量级CPU镜像快速部署

中文语义相似度计算实战|基于GTE轻量级CPU镜像快速部署 1. 背景与应用场景 在自然语言处理(NLP)领域,语义相似度计算是搜索、推荐、问答系统和文本聚类等任务的核心技术之一。传统基于关键词匹配的方法难以捕捉句子间的深层语义…

零代码上手中文相似度计算|GTE模型镜像集成动态仪表盘展示

零代码上手中文相似度计算|GTE模型镜像集成动态仪表盘展示 1. 引言 在自然语言处理(NLP)的实际应用中,语义相似度计算是支撑智能客服、推荐系统、信息检索和问答系统的核心能力。传统基于关键词匹配的方法难以应对“同义表达”“…

零代码基础搞定语义相似度服务|GTE镜像化方案开箱即用

零代码基础搞定语义相似度服务|GTE镜像化方案开箱即用 1. 引言:语义相似度的工程落地痛点与新范式 在自然语言处理(NLP)的实际应用中,语义相似度计算是推荐系统、智能客服、文本去重、问答匹配等场景的核心能力。然而…