news 2026/8/22 1:31:34

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

作者头像

张小明

前端开发工程师

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/8/21 21:00:44

收藏!SLM与LLM深度对比:中小企业AI落地首选路径与大模型学习指南

本文深度剖析大型语言模型(LLM)与小型语言模型(SLM)的核心特性及差异点,重点凸显SLM在垂直领域精度、部署灵活性及成本控制上的突出优势,明确其作为中小企业及特定场景AI落地优选方案的核心价值。通过真实商…

作者头像 李华
网站建设 2026/8/21 19:10:01

禁止过分投入2:夏日大排档 /Love Too Easily 2 Summer Pocha Build.20586137(6.9G) 免安装中文版游戏资源分享及攻略教程

“大排档主题的真人恋爱互动影游。倒霉男主前有学生时代遭受霸凌,后有进入社会工作被车意外撞伤,从医院出来没多久还被朋友骗着被迫接手经营一家不景气的大排档而背负巨额债务。也正因这场变故,让他获得了邂逅多位漂亮妹子的机会,…

作者头像 李华
网站建设 2026/8/22 1:03:25

从Reactor到网络库:10天打造生产级C++高性能网络库

嘿,小伙伴们好!我是小康👋 下半年小康自研实现了 11 个 C 硬核项目: 线程池、内存池、MySQL连接池、多线程下载工具、 内存泄漏检测工具、ReactorX、日志库minispdlog,无锁栈、 无锁队列SPSC,无锁队列MPM…

作者头像 李华
网站建设 2026/8/21 21:37:18

测试右移:构建线上质量监控的守护体系

1 测试右移的时代必要性 随着敏捷开发与DevOps理念的普及,软件交付频率呈现指数级增长。传统测试活动集中于研发阶段(测试左移)的模式已难以满足现代软件系统的质量保障需求。测试右移通过将质量监控延伸至生产环境,形成了覆盖“…

作者头像 李华
网站建设 2026/8/21 23:01:11

【稀缺实战资料】Open-AutoGLM对接vLLM全流程配置细节首次公开

第一章:Open-AutoGLM vLLM 推理配置概述 Open-AutoGLM 是基于 AutoGLM 架构开发的开源大语言模型,支持在 vLLM(Vectorized Large Language Model)推理框架下高效部署。该配置方案旨在最大化利用 GPU 资源,提升批量请求…

作者头像 李华
网站建设 2026/8/21 5:50:02

【大模型本地化部署新突破】:Open-AutoGLM镜像一键启动的终极方案

第一章:Open-AutoGLM本地化部署的背景与意义随着大模型技术在自然语言处理领域的广泛应用,企业对数据隐私、响应延迟和系统可控性的要求日益提升。将大型语言模型进行本地化部署,成为保障业务安全与高效运行的重要路径。Open-AutoGLM 作为一款…

作者头像 李华