• 高并发编程陷阱之check and set


    今天公司CTO跟隔壁部门开技术会,旁听了一下。所讲的内容感觉好高大上啊!简单记录一下

    场景是这样的:

        if(check(id)===true)
        {
           
         }else{
            set(id);
         }
    

    什么意思呢? 就是首先去查数据库这个id存不存在,不存在的话就去设置一下。

    当时CTO就指着这段代码问你们看有没有什么问题?

    虽然我java不怎么懂,但从逻辑上没啥问题啊,这么简单的逻辑怎么有问题呢?!!

    然后CTO 说:如果用户在做相关请求的时候用户因为什么原因刷新了一下页面,就造成了俩个一样的请求,俩个请求一前一后进入上面那个if else 语句就会出现问题。
    这是单机的情况,如果是多机(开了多个做负载均衡),那么更容易出错。

    解决方法是在数据库加锁。

    简直是大开眼界啊,之前写代码根本不会想到这样的问题,CTO@闪银奇异,果然牛逼!

  • 相关阅读:
    php笔记--php安装
    IEDA-Git的应用
    php类型
    3.比较与逻辑运算
    2.阶乘
    1.双分支
    013_request对象包含的内容以及获取
    011_jsp引入JSTL后实现jsp的解耦
    010_jsp引入JSTL
    ORACLE1.28 面试题
  • 原文地址:https://www.cnblogs.com/yyrdl/p/4799049.html
Copyright © 2020-2023  润新知