• 做多用户操作的系统,一定,一定,一定要考虑“并发”


    做多用户操作的系统,一定,一定,一定要考虑“并发”,这种并发,除了系统级别的并发,还有应用级别的并发。如果两个人同时去操作相同的数据,那么要有“第二个人就操作不了”的机制!

    请大家考虑一套将来再遇到这种问题的解决方案.

    这里我针对 如果两个人同时去操作相同的数据,那么要有“第二个人就操作不了”的机制!提出一种解决方法:

    有一个比较好的办法可以解决这个问题,那就是通过一个单独的可以顺序递增的version字段。改为以下方式即可:

    //查询出商品信息,version = 1
    select version from items where id=1
    //修改商品库存为2
    update items set quantity=2,version = version+1 where id=1 and version = 1;

    每次在执行数据的修改操作时,都会带上一个版本号,一旦版本号和数据的版本号一致就可以执行修改操作并对版本号执行+1操作,否则就执行失败。因为每次操作的版本号都会随之增加,所以同时修改的话只有一个修改生效。

    除了version以外,还可以使用时间戳,因为时间戳天然具有顺序递增性:

    • 首先表里面要增加的一个记录时间戳的字段;
    • 每次更新数据的时候都要更新这个字段的值为最新的时间戳;
    • 并且更新的sql语句里面的where条件必须要有这个字段;

    例子:

    UPDATE_AT是时间戳字段,请看如下两条相同的update语句:

    update "AREACODE" set "UPDATE_AT"=now() where "GCODE"='510303' AND "UPDATE_AT"='2019-06-19 17:02:42.755857';
    update "AREACODE" set "UPDATE_AT"=now() where "GCODE"='510303' AND "UPDATE_AT"='2019-06-19 17:02:42.755857';

    执行结果如下:

     

    结果第一条sql语句执行了,第二条没有执行成功,实现了如果 两个人同时去操作相同的数据,那么要有“第二个人就操作不了”

  • 相关阅读:
    vs2013常用快捷键收集
    关于cocos2d-x 与 cocos2d-html5 资源预加载的思考
    【转】使用cocos2d-console工具转换脚本为字节码
    多层CCLayer的touch冲突解决
    jsb里出现的 Invalid Native Object的一次bug修复的思考
    win7 通过命令行压缩文件
    消格子时一个很深的bug的修复纪录
    mac自带apache服务器开启
    shell命令:给当前目录里一个文件压缩一份不包含.svn文件的zip包
    shell命令:删除当前.sh文件所在目录下的zip包,并且重新打包
  • 原文地址:https://www.cnblogs.com/pengyong1211/p/11052559.html
Copyright © 2020-2023  润新知