zoukankan      html  css  js  c++  java
  • 重复点击导致超卖

    问题描述

      说来奇怪,这个问题的发现是一个非常偶然的情况

      因为鼠标问题,点击一次,触发了两次,导致了并发,比如只有三件库存,快速点击两次生成了两条记录,但是库存缺只减少了一个,

      为了复现这个问题,使用我单身20年的手速,尝试了很多次才会有一次并发问题出现

      起初遇到这个问题时,想的是为什么库存只减少了一个,应该是减少两个才对,难道是数据表只更新了一次,后来才明白,商品表更新了两次,只是因为两次的操作都是将3更新为2

    问题解决

      首先前端更新版本做了限制,重复点击只会调用一次接口

      后端使用乐观锁

      因为PHP框架使用的是yii2,所以乐观锁加起来也比较方便,首先在对应的商品表中增加版本号字段 如 version 类型为整型

      然后重写 

     public function optimisticLock()
        {
            return 'version';
        }

      返回值为自己定义的版本号字段

      之后再次更新数据时,会自动调用乐观锁

      实现原理在yiidbBaseActiveRecord::updateInteranl()方法

      

  • 相关阅读:
    .net2.0中使用SqlBulkCopy进行大批量数据迁移
    css 的不兼容性问题
    使用负边距创建自适应宽度的流体布局
    关于元素的 width属性无效果
    jQuery UI
    ajax.dll 与 ajaxpro.dll
    汉字转拼音
    基础数据库对象类
    各种弹出窗口函数
    Email工具类
  • 原文地址:https://www.cnblogs.com/baozi-tudou/p/13957793.html
Copyright © 2011-2022 走看看