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语句获取到的商品库存数量
    

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

  • 相关阅读:
    C# 读取本地图片 转存到其他盘符
    Sql server之路 (六)上传服务器图片
    wp8 ListPicker
    Sql server之路 (五)插入多条数据
    Wcf for wp8 调试Wcf服务程序(四)
    win8 鼠标失灵解决办法
    Sql server之路 (一)基础学习
    Caché开发环境介绍
    Cache数据库简介
    MYSQL之sql优化——慢查询日志
  • 原文地址:https://www.cnblogs.com/jingxiaoniu/p/11053051.html
Copyright © 2011-2022 走看看