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

    问题描述

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

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

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

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

    问题解决

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

      后端使用乐观锁

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

      然后重写 

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

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

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

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

      

  • 相关阅读:
    curl 命令行使用参考
    PHP 输出json_encode 空白的检查
    RAM和ROM
    浮点数
    负数补码
    位运算
    无法加载文件 C:UsershuangshiminAppDataRoaming pmwechat-terminal.ps1,因为在此系统上禁止运行脚本
    windows + php + shell_exec 执行失败的可能原因
    Ubuntu 发送邮件
    红黑树
  • 原文地址:https://www.cnblogs.com/baozi-tudou/p/13957793.html
Copyright © 2011-2022 走看看