微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

防止库存超卖方法总结

1、简单处理【update & select 合并】(乐观锁)

2、使用redis队列

实现的方式是用的redis的list队列,框架为laravel

核心部分为list的pop操作,此操作为原子性,即使很多用户同时到达,也是依次执行

2.MysqLMysqL单表的数据量大于1000万行时,建议进行水平分拆。

利用redis的incr、decr的原子性做操作
redis的lpush、rpop的原子性做操作,但是这个只能一个一个的扣,但不能原子地同时扣多个
sql乐观锁

 

 

 

二、扣减库存
安全扣减库存方案有很多说法,列一下几个方案和我推荐的方案。

方案一:分布式锁
有的文章会用redis分布式锁来做保证扣库存数量准确的环节,让点击结算时,后端逻辑会查询库存和扣库存的update语句同时只有一条线程能够执行,以商品id为分布式锁的key,锁一个商品。但是这样,其他购买相同商品的用户将会进行等待。

优点:这样做虽然安全
缺点:但是失去的是性能问题。
方案二:分布式锁+分段缓存
也有文章会说借鉴ConcurrenthashMap,分段锁的机制,把100个商品,分在3个段上,key为分段名字,value为库存数量用户下单时对用户id进行%3计算,看落在哪个redis的key上,就去取哪个。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐