本文主要是介绍Java实现库存数量冻结_高并发场景-订单库存防止超卖,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
亿级流量java高并发与网络编程实战
99.1元
(需用券)
去购买 >
背景
在电商系统中买商品过程,先加入购物车,然后选中商品,点击结算,即会进入待支付状态,后续支付。
过程需要检验库存是否足够,保证库存不被超卖。
场景一:买家需要购买数量可以多件
场景二:秒杀活动,到时间点只能购买一件
目的
防止相同用户重复下单
检查库存准确数量
防止扣错库存数量
扣库存时性能效率提升、不阻塞用户
点赞再看,关注公众号:【地藏思维】给大家分享互联网场景设计与架构设计方案
掘金:地藏Kelvin https://juejin.im/user/5d67da8d6fb9a06aff5e85f7
主要解决手段
利用redis的incr、decr的原子性做操作
redis的lpush、rpop的原子性做操作,但是这个只能一个一个的扣,但不能原子地同时扣多个
sql乐观锁
交互流程
主要环节:购物车->结清->支付
本文讲述结清时,扣库存环节,分布式系统产生订单环节后续文章再详细分析。
备注:挺推荐使用https://www.processon.com/在...
一、防止重复
利用redis分布式锁
用分布式锁,是为了防刷、防止同一个用户同一秒里面把购物车里的商品进行多次结算,防止前端代码出问题触发两次。
利用Jedis客户端编写分布式锁
String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
lockKey是redis的Key,为用户id+商品id+商品数量组成,这样同一秒中只能有一次处理逻辑。
requestId是redis的value,实际是当
这篇关于Java实现库存数量冻结_高并发场景-订单库存防止超卖的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!