zoukankan      html  css  js  c++  java
  • 商品库超卖的乐观锁

    商品库存的乐观锁实现。

    出现场景:

    避免商品出现超卖(即成功下单的订单中商品的库存数量大于商品现有的库存量,则称为商品超卖)的问题,核心技术是利用数据库的事务锁机制,即不允许同一商品的库存记录在同一时间被不同的两个数据库事务修改

    功能实现:

    在前柔性事务介绍中所提到的,用户在进行商品下单操作中,会进行一系列的业务逻辑判断和操作,对于商品库存信息这一访问热点数据,如果采用数据库的悲观锁(比如select语句带for update)模式,则会给订单处理带来很大的性能阻塞,所以会采用乐观锁的方式实现商品库存的操作。

    实现的方式也比较简单,也就是在最后执行库存扣减操作时,将事务开始前获取的库存数量带入到SQL语句中与目前数据库记录中的库存数量进行判断,如果数量相等,则该条更新库存的语句成功执行;如果不相等,则表示该商品的库存信息在当前事务执行过程中已经被其他事务修改,则会放弃该条update的执行,可以采用重试的机制重新执行该事务,避免商品超卖的发生。具体的SQL语句示意如下:

    Update auction_auctions set quantity=#inQuantity#,where auction_id=#itemId# and quantity=#dbQuantity#
    
    其中#dbQuantity#为事务中在update语句执行前,通过select语句获取到的商品库存数量
    

     以上就是这次的全部内容!

  • 相关阅读:
    vue简单分屏(1,4,9,16),全屏,还需要调整
    vue 中的Vuex实践
    常用工具类
    java Log日志规范
    spring中对象的注入方式
    不恰当的update语句使用主键和索引导致mysql死锁
    JPA规范及其它持久层框架
    webservice基本功能介绍
    Activiti工作流(二)之常用操作
    Activiti工作流(一)之基本操作介绍
  • 原文地址:https://www.cnblogs.com/jingxiaoniu/p/11053051.html
Copyright © 2011-2022 走看看