商城业务如何增加或者减少库存

Posted cjjjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了商城业务如何增加或者减少库存相关的知识,希望对你有一定的参考价值。

库存的变化是原子性的,如果在更新的库存的时候没有考虑好如何更新库存,那么会导致库存的 重复修改、脏读、幻读、不可重复读等操作。

但如果加锁的粒度过于大的话,就会导致大量的更新库存的请求失败。无法支持高并发的。

那么该怎么样写合适代码来更新库存呢?

其实核心思想是:

1. 加事务

2. 查询更新

先看下导致重复修改的代码:
技术图片

 

 技术图片

 

 虽然这个方法是加了事务,然而事务在执行的过程中,只能保证事务的独立性,但是在更新库存的时候,还是造成了重复写入的错误。

接着看下,第一版本的优化:

技术图片

 

 第一版的优化方法是对每个skuId加了一个锁,保证同一时刻对某一sku_id的操作是唯一的,但是这种方法无法支持高并发,对一个高并发的网站来说不是一个很好的选择。

再看下第二版本的优化:

技术图片

 

 

 这个版本的优化是在执行更新操作的时候,比较一下skuId的库存数是不是和原先的一样,如果一样的话就更新,如果不一样的话就更新失败。

我们这样想,同时有10个请求进来,对数据库进行操作。第一个请求更新完库存后,其他9个请求去校验库存,库存校验这个时候一定是失败的,这样会导致另外9的请求的更新库存是失败的。

最后再看下最终版本的解决方法:

技术图片

 

 最后的方法是将判断库存是不是足够,以及增加库存的语句放到了一个sql里,这样的话,每个事务在执行的时候只需要判断,库存是不是足够就行了。并不会影响每个事务的更新操作。

以上是关于商城业务如何增加或者减少库存的主要内容,如果未能解决你的问题,请参考以下文章

[原创]商城系统下单库存管控系列杂记(并发安全和性能基础认识)

点击增加或者减少商品数量并且自动计算总价格

vivo商城计价中心 - 从容应对复杂场景价格计算

20170405-STO库存转储单

c语言 商品管理系统

库存扣多了,到底怎么整