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

    问题描述

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

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

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

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

    问题解决

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

      后端使用乐观锁

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

      然后重写 

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

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

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

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

      

  • 相关阅读:
    表单:文本框默认提示信息(小例子)
    代码:jquery小效果—— 吸顶
    Day5:面向对象的定义(中)
    Day5:面向对象的定义(上)
    Day4:数组(扩展知识)
    Day4:数组
    Day3:JAVA方法的定义
    Day2:JAVA判断与运算(循环)
    Eclipse使用技巧
    (HTTP)状态码详解
  • 原文地址:https://www.cnblogs.com/baozi-tudou/p/13957793.html
Copyright © 2011-2022 走看看