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. 如何处理错误消息Please install the Linux kernel header files
  2. android 中Dialog对话框及自定义Dialog的方法
  3. 工业交换机单纤或双纤都只是占用一个端口吗?
  4. h3c交换机配置远程管理_H3C S3100交换机配置VLAN和远程管理
  5. HandlerInterceptor 处理器拦截器的用法
  6. android JBOX2D粒子碰撞的实例,以达到特殊效果
  7. 无人值守地磅电子汽车衡中称重系统传感器原理及应用
  8. DirectX11 With Windows SDK--00 目录
  9. 如何解决md打不开问题?
  10. iOS包体积优化实践
  11. 图片切换马赛克动画效果
  12. 【视频学习】完结 王霸胆 -美式发音28天完美养成计
  13. 树莓派配置IP地址和wifi方法
  14. [文心大模型创意项目]还在愁没有头像?属于你的个人头像来了!
  15. 哥德尔不完全性定理 悖论式陈述 PM不可判定命题,和哥德尔可表达性定理——哥德尔读后之十八
  16. 致刚入职场的你 - 程序员的成长笔记
  17. jbpm学习笔记(九) task活动之泳道的概念
  18. MATLAB如何读取文件中的数据(全网最简便)
  19. day18-java
  20. 还记得《非诚勿扰》葛大爷的“分歧终端机”吗?迅雷链帮他实现了

热门文章

  1. 数据处理----特征(一)
  2. 光源选择的三个重要图
  3. 鸿蒙生死印作用,逆天邪神:鸿蒙生死印应该有个BUG能力,两位梵天老祖身上有提示...
  4. 使用OpenSSL生成自签名证书和格式转换
  5. 2.《新生——七年就是一辈子》 ——李笑来
  6. 函数 RFC 函数 BAPI
  7. jsfiddle 国内镜像
  8. 帝国cms后台登陆显示Cann‘t connect to DB 解决方法
  9. Java集合 学习记录
  10. mysql len hex asc_MySQL中RR模式下死锁一例