1、传统通过数据库保证不超卖

事务+行锁并不是解决超卖的方案,只是保障数据的统一性。传统通过回滚事务的方式防止某些用户多卖的情况。

采用新建一个防重表+事务的方式防止超卖。同一事务中,采用如 用户ID+商品ID 的方式作为防重表唯一索引字段的数值,保障超卖时事务的统一回滚。

字段名 字段类型 字段说明
id 长整型 主键
code 字符串(唯一索引) 防重码

//事务开始
Insert into 防重表(code) value (‘用户ID+商品ID’)
Update 库存表 set num=num-1 where goodId=商品ID and num>0
//事务结束

该方案在采用 num>0 防止库存负值的出现,需要额外创建防重表防止重复提交。但在有调用外部接口如微信支付时,需要有回滚机制。

2、采用RateLimiter限流有效降低并发超卖概率

private RateLimiter orderCreateRateLimiter;@PostConstruct
public void init(){orderCreateRateLimiter = RateLimiter.create(300);
}//以下为下单方法里面代码开始部分添加
if(!orderCreateRateLimiter .tryAcquire()){//返回活动太火爆稍后再试
}

该方案只为降低并发,并非解决超卖方案,需结合使用,并每秒令牌数量需要根据系统实际性能评估。

3、采用redis的incrby特性

a、解决超卖检验:我们可以把数据放入Redis中,每次扣减库存,都对Redis中的数据进行incryby 扣减,如果返回的数量大于0,说明库存够,因为Redis是单线程,可以信任返回结果。

b、库存扣减不需要再判断数量是否足够,只需要傻瓜扣减库存就行,对数据库执行如下语句,当然还是需要处理防重幂等的,不需要判断数量是否大于0了,扣减SQL只要如下写就可以。

//事务开始
Insert into 防重表(code) value (‘用户ID+商品ID’)
Update 库存表 set num=num-1 where goodId=商品ID
//事务结束

4、基于Redis以及Mysql瓶颈的升级方案
如何使用Redis实现电商系统的库存扣减?_spring_root的博客-CSDN博客_redis 库存在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。解决方案使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。还是使用数据库,但是将库存分层多份存到多条记录里面,扣减库存的时候路由一下,这样子增大了并发量,但是还是避免不了大量的去访问数据库来更新库存。将库存放到redis使用redis的incrby特性来扣减库存。分析在上面的第一种和第二种方式都是基于数据来扣减库存。基于数据库单库存第一https://blog.csdn.net/baidu_39322753/article/details/119295670

电商库存系统的防超卖和高并发扣减方案_qryc的博客-CSDN博客_数据库防止超卖引言如果你要开发一个电商库存系统,我最担心的是什么?闭上眼睛想下,当然是高并发和防超卖了!本文给出一个统筹考虑如何高并发和防超卖数据准确性的方案。读者可以以此为思考原点,或直接使用本设计,或在此基础上做出更有的设计。下面用电商库存为示例,来说明如何高并发扣减库存,原理同样适用于其他需要并发写和数据一致性的场景。库存数量模型示例为了描述方便,我们使用简化的库存数量模型,真实场景中库存数据项会比我的示例多很多,但已经够说明原理。如下表,库存数量表(stockNum)包含商品标识和库存数量两个字段https://blog.csdn.net/qrycf/article/details/119462589

高并发超卖问题简要解决方案相关推荐

  1. 解决高并发的问题python_python ---解决高并发超卖问题

    使用redis 解决美多商城超卖的问题 import redis r = redis.Redis(host='localhost', port=6379) #定义过载 def limit_handle ...

  2. 高并发缓存队列防止溢出解决方案

    目录 1 背景介绍 1.1 设计分析微信抢红包 1.2 红包定时导入缓存队列 2 队列术限流 2.1 高并发场景分析 2.2 队列削峰实战 3 设计原则 3.1 动静分离 3.2 微服务化 3.3 负 ...

  3. java 高并发 订单编号递增(解决方案)

    java 高并发 订单编号递增(解决方案) 参考文章: (1)java 高并发 订单编号递增(解决方案) (2)https://www.cnblogs.com/chihirotan/p/6483890 ...

  4. 高并发超发优惠券问题

    优惠券领劵接口-Jmeter压测扣超发优惠券问题暴露 简介:Jmeter压测领劵接口-超发优惠券问题暴露 新建接口压测计划 压测领劵接口 完成xml编写 <!--扣减库存--><up ...

  5. PHP高并发商品秒杀问题的解决方案

    前言 秒杀会产生一个瞬间的高并发,使用数据库会增加数据库的访问压力,也会降低访问速度,所以我们应该使用缓存,来降低数据库的访问压力: 可以看出这里的操作和原来的下单是不一样的:产生的秒杀预订单不会马上 ...

  6. Web大规模高并发请求和抢购的解决方案

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  7. 大流量高并发量网站的之解决方案

    一.对于网站访问速度影响的条件如下: 瓶颈主要有: 1.磁盘搜索 优化方法是:将数据分布在多个磁盘上 2.磁盘读/写 优化方法是:从多个磁盘并行读写. 3.CPU周期 优化方法:扩充内存 4.内存带宽 ...

  8. 高并发处理方案_高并发系统下的缓存解决方案

    什么样的数据适合做缓存? 缓存和DB数据一致性在之前已讲过,详细可参考下面阅读推荐<如何保障mysql和redis之间的数据一致性>,我们这里讲一讲缓存穿透.缓存雪崩和击穿的三种场景解决方 ...

  9. 每天高并发超千万订单,滴滴的计价系统是如何构建的?

    桔妹导读:计价是出行业务中非常重要的一部分.在滴滴,不同的业务有不同的计价方式,比如网约车不仅有根据里程.时长.时段等进行的分时计价,在拼车.特惠快车等场景还支持一口价,青桔则主要基于起步价和时长费等 ...

最新文章

  1. ajax同步,异步简单的介绍
  2. Eclipse 导出
  3. Bigraph Extension
  4. android 屏蔽快速点击,Android-如何防止用户过快频繁点击按钮(一)
  5. Winform DataGridView中利用WebClient异步加载显示网络地址的图片
  6. 机器视觉:远心光学探秘
  7. 怎样成为PHP 方向的一个合格的架构师(转)
  8. Open CV leaning
  9. Linux 安装 MySQL 以及 一些常见问题解决方案
  10. 进展-Silverlight5、 windows phone 7、pc 三栖引擎,2D核心已完成
  11. 2018上半年区块链安全报告
  12. 接口自动化测试实践指导(上):接口自动化需要做哪些准备工作
  13. 计算机网络放大器的作用,运算放大器工作原理是什么?
  14. Java 首字母大写高效方法
  15. 《C++ Concurrency in Action》笔记
  16. android白屏优化方案,优化Android App启动白屏
  17. 关于xftp和xshell 软件评估期已过的解决办法
  18. TestBird《2021中国证券测试白皮书》
  19. 常用的英文缩写和短信缩写
  20. 分享几个好看的Bootstrap后台管理响应式模板

热门文章

  1. 网络中的计算机显示不全,查看工作组计算机时计算机显示不全
  2. python ox_Oracle 模块操作Oracle
  3. 那些编程语言中的“后浪”都怎么样了:Swift 成功把“前浪”拍在沙滩上
  4. linux的vm相关参数介绍
  5. java Date 0时0分0秒_C# 获取某个时间的0点0分和23点59分59秒
  6. Yearning SQL审核平台使用分享
  7. Ubuntu下DOL开发环境配置
  8. 地球村人类合作计划2.3版
  9. [深度学习]暴走的残差深度学习网络家族!加深了网络还是隐式多网络叠加?
  10. 无聊的时候看了下科学计数法..