社区
高性能WEB开发
帖子详情
抢购业务中 库存锁应该加在哪个步骤?
Quiet_a
2017-07-18 03:59:25
如题。
在抢购业务中,应该在哪一步加锁减库存? 下单? 支付?
下单减库存:下单后不支付如何处理,(5-10分钟)订单过期? 会不会影响抢购业务,引起少卖?
支付减库存:(锁应该加在哪里)点击支付? 同上会不支付,还会引起加解锁问题。支付完成?会引起超卖吧?
请教别人给的一种解决方案:下单减库存(订单过期)。在抢购页面提示未支付数量。
各位大大,还有其他解决方案么。大家一般是怎么处理的。
...全文
1268
5
打赏
收藏
抢购业务中 库存锁应该加在哪个步骤?
如题。 在抢购业务中,应该在哪一步加锁减库存? 下单? 支付? 下单减库存:下单后不支付如何处理,(5-10分钟)订单过期? 会不会影响抢购业务,引起少卖? 支付减库存:(锁应该加在哪里)点击支付? 同上会不支付,还会引起加解锁问题。支付完成?会引起超卖吧? 请教别人给的一种解决方案:下单减库存(订单过期)。在抢购页面提示未支付数量。 各位大大,还有其他解决方案么。大家一般是怎么处理的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
以专业开发人员为伍
2017-08-20
打赏
举报
回复
抢购就不应该(实时)减库存。 在抢购开始之前: 1. 可以先按照单品id生成n个抢购商品,它们都指向相同的商品资料。因为抢购结果需要跟踪有没有作弊,所以此方法最科学。 2. 也可以在一个独立的内存数组里管理模拟的内存数量,而并不与真实的库存数量同步。
tianfang
2017-08-17
打赏
举报
回复
1 并发请求内部排队下单(串行化),基本不用锁表,库存 2 支付才减库存。 3 超卖一定比例,但是要换个说法,比如Amazon用排队。抢购成功的超时未支付,超卖(排队)的人才能支付
zc_levi
2017-08-16
打赏
举报
回复
秒杀之类的应用场景一般都是用缓存数据库redis实现,具体可以参考http://www.cnblogs.com/0201zcr/p/5942748.html
青年卫大师
2017-08-09
打赏
举报
回复
最好使用缓存
tlzjff
2017-07-26
打赏
举报
回复
我觉得你的问题设计到业务问题,也设计到技术问题 下单减库存:下单后不支付如何处理,(5-10分钟)订单过期? 会不会影响抢购业务,引起少卖? 我认为这个是业务问题,如果设计成10分钟不付款过期的话,应该把原有的可购买库存数量更新回去,使得整体库存可被消化干净 支付减库存:(锁应该加在哪里)点击支付? 同上会不支付,还会引起加解锁问题。支付完成?会引起超卖吧? 支付时,可以加一个锁(具体不同的系统可能枷锁的地方不一样,如果是单数据库的话,可找一个具有产品购买信息的产品行锁,至于性能问题,就不在这里过多讨论了,优化方案需根据具体情况再分析),之后可以用可靠的消息队列,只要进入消息队列,就返回成功,最好先落地流水,再执行付款,再进后续任务记录队列,为最差情况做数据超时回滚用,如果过程发生意外,则提示用户执行过程出现意外,请留意订单状态信息,后续需要做库存系统和购买流水记录的状态检查,如果存在流水,队列中不存在,则超过时间后,需要回滚用户,如流水表不存在,则用户扣款也未发生,无须回滚。 当用户支付成功,消息也进入了任务队列,后续的业务,就按照消费一条数据,同时减去一个库存的方式来做,做好事务和重试,并且最好也做好流水记录表,并且要做好幂等设计,如果出现意外,也需要单独回滚,因为用户已经支付成功了,这里无论如何即使人工接入,也要保证业务的成功,否则回滚代价太高,需要实现退款逻辑。
基于Go语言大型企业级电商秒杀系统实战教程
利用缓存对写请求:缓存也是可以应对写请求,比如我们可以把数据库
中
库存
数据迁移到Redis缓存
中
,所有减
库存
操作都在Redis
中
进行,然后通过后台进程把Redis
中
的用户秒杀请求同步到数据库
中
数据库层 数据库层是最...
库存
超卖—解决方案1 乐观
锁
使用乐观
锁
解决秒杀系统原理(仅限数据量小的
库存
) 1.
业务
流程: (1)
库存
>0就减
库存
,并记录减了
库存
的用户到
抢购
成功记录表
中
, (2)前台调用接口查询是否
抢购
成功。 2. 采用乐观
锁
防止
库存
<0 乐观
锁
就是认为不会产生数据访问冲突。比如update修改商品status为2 update 表 set status=2, version=version+1 where id=#{id} and version=#{version}; 3.原理分析 乐观
锁
:如果有100
库存
,同时来一
07|强一致
锁
:如何解决高并发下的
库存
争抢问题?
这节课,我们针对
库存
锁
争抢的问题,通过Redis的特性实现了六种方案,不过它们各有优缺点。以上这些方法可以根据
业务
需要组合使用。其实,我们用代码去实现
锁
定扣
库存
也能够实现
库存
争抢功能,比如本地CAS乐观
锁
方式,但是一般来说,我们自行实现的代码会和其他
业务
逻辑混在一起,会受到多方因素影响,
业务
代码会逐渐复杂,性能容易失控。而Redis是独立部署的,会比我们的
业务
代码拥有更好的系统资源去快速解决
锁
争抢问题。
如何通过事务消息保障
抢购
业务
的分布式一致性?
简介: 在柔性事务的多种实现
中
,事务消息是最为优雅易用的一种。基于阿里云RocketMQ高性能、高可用的特点,完全可以胜任
抢购
业务
这类高并发大流量的场景。但引入事务消息机制在实现高性能的同时,也增加了整体的
业务
复杂度。我们需要对
业务
场景进行充分评估,选择与自身
业务
特点最为匹配的一种,才能更好地发挥柔性事务的价值。 前言 在电商领域,
抢购
和秒杀是非常普遍
业务
模式,
抢购
类
业务
在快速拉升用户流量并为消息者带来实惠的同时,也给电商系统带来了巨大考验。在高并发、大流量的冲击下,系统的性能和稳定性至关重要,任何.
电商
中
的
业务
逻辑|
库存
超卖
库存
超卖是一个比较常见的问题,并且这个问题很容易出现在秒杀系统
中
,如果做个电商相关的项目,这个问题基本是面试必问的问题。秒杀场景之所以容易出现
库存
超卖的情况,是因为在秒杀活动
中
,商品数量通常很少,而参与的用户却非常多,用户同时
抢购
的压力非常大。由于实时更新
库存
需要花费一定的时间,因此,在短时间内可能会存在多个用户同时购买同一件商品的情况,从而导致
库存
不足的情况。解决
库存
超卖的问题采取很多种方案,例如:可以通过限流措施来控制并发量和请求频率;
高性能WEB开发
25,985
社区成员
4,366
社区内容
发帖
与我相关
我的任务
高性能WEB开发
高性能WEB开发
复制链接
扫一扫
分享
社区描述
高性能WEB开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章