news 2026/9/2 19:34:35

优惠卷业务超卖问题解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
优惠卷业务超卖问题解决方案

问题背景

在在线教育业务中,因为功能的扩展刺激消费通常会有一个优惠卷的功能,当时这些优惠卷通常是限量的需要学员自助领取,在一些特定场景下会出现学员领取卷的总数量大于运营设置的卷的总数量,这就是超卖问题的现象,或许在这个创建下叫做“超领”可能更合适些。

产生原因

假设当前运营设置了10张优惠卷,前面9已经被抢完了,还是最后一张,但是此时有三个学员在相同时间下都做了领卷的操作,最终导致三个学员都领到卷了,导致领取总量大于发放总量。

解决方案

1.保证数据的原子性。添加发放总量 大于 以发放量的条件,保证多个在事务操作下数据的总量不会发生改变。

优点:代码改动量下,并且效果比较好,不会出现ABA的问题。(目前我们公司就是使用这个方案)

缺点:

  • 事务为了保证原子性,会在对这个优惠卷数据上行锁。
  • 在没有设置索引的时候可能会做全量扫描,效率上会变低。因此我们需要设置对应的有效索引防止走全表。
  • 在极端的情况下会更新失败,需要设置重试机制。当有多跟线程同时操作的时候,通过更新时回去行级锁来控制执行顺序,因为某些原因导致获取获取锁超时,最总导致更新失败。

2.悲观锁。通过synchronized对优惠卷id进行上锁,每次只有一个保证请求是串行的,执行速度比较慢,当时确实是最可靠的。

3.乐观锁。优点:保证了在请求的并行执行,在执行效率上是很高。

缺点:在请求大量的时候虽然都可以执行,但是最终只会有一个执行超过,在完成率上是比较低的。实现上通过版本号进行控制。在实现上是三者中最繁琐的。我们没有单独定义本号字段来做的,我们是使用更新时间做版本号的来实现的。

在极端情况下乐观锁会出现无法感知的超卖情况。但是对我们目前的业务场景不会造成影响。

极端的场景 (ABA):对总数不影响,导致可能会导致业务逻辑错误,保证数据的原子性就会存在这个问题。

时间线: 1. 线程A读到 version = 1, issued_count = 99 2. 线程B更新:issued_count = 100, version = 2 3. 线程C(退款)更新:issued_count = 99, version = 3 4. 线程A执行更新,version匹配成功!错误地认为数据没变
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 10:15:17

软件测试环境建设与运维管控体系

1 测试环境架构设计原则 1.1 环境分层策略 研发自测环境:部署最新构建版本,支持开发者快速验证功能 集成测试环境:模拟生产环境拓扑,保障模块间协调性 预发布环境:与生产环境保持硬件、网络、数据三位一体的一致性…

作者头像 李华
网站建设 2026/9/3 2:36:31

轮回修仙传 v1.0.11.27.1 免安装中文版下载及使用方法

轮回修仙传 v1.0.11.27.1 免安装中文版下载及使用方法 游戏下载地址 https://pan.quark.cn/s/5c8a8f81d9d0 游戏介绍 本作是一款轻度化快节奏的修仙游戏,没有自由开放的修仙大世界,更多是在一次又一次轮回的选择中,寻觅更多的仙缘奇遇&…

作者头像 李华
网站建设 2026/9/2 2:42:15

AI自动化新突破:Open-AutoGLM赋能外卖自动下单(全链路解析)

第一章:AI自动化新突破:Open-AutoGLM赋能外卖自动下单随着大语言模型与自动化技术的深度融合,AI在真实生活场景中的应用正迎来关键突破。Open-AutoGLM 作为新一代开源自动化智能体框架,首次实现了基于自然语言指令的端到端外卖下单…

作者头像 李华
网站建设 2026/9/1 23:28:00

【Open-AutoGLM物流同步实战指南】:掌握高效信息同步的5大核心技术

第一章:Open-AutoGLM物流信息同步的核心价值在现代物流系统中,信息同步的实时性与准确性直接影响供应链效率。Open-AutoGLM 作为一种基于生成式语言模型的自动化数据协同框架,能够实现跨平台、多节点的物流信息智能同步,显著提升数…

作者头像 李华
网站建设 2026/9/2 21:44:37

【Open-AutoGLM配置终极指南】:从零搞定requirements.txt依赖管理

第一章:Open-AutoGLM依赖管理概述Open-AutoGLM 是一个面向自动化代码生成与语言模型集成的开源框架,其核心能力依赖于精确的依赖管理机制。有效的依赖管理不仅确保开发环境的一致性,还保障了模型训练、推理和服务部署各阶段的可复现性。依赖声…

作者头像 李华
网站建设 2026/9/2 21:44:58

MySQL中给字段添加唯一约束的方式有哪些?

一、先明确:为什么必须掌握唯一约束?你是否知道添加唯一约束的多种方式?(创建表时 / 修改表时)能否区分 “单列唯一约束” 和 “多列唯一约束” 的适用场景?是否了解唯一约束的核心特性?(比如与主键的区别…

作者头像 李华