博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 高并发 订单编号递增(解决方案)
阅读量:5301 次
发布时间:2019-06-14

本文共 498 字,大约阅读时间需要 1 分钟。

业务描述:

  首先从数据中查找最近的一条订单数据,然后将之前的订单号码+1作为新的订单号码,插入到数据库当中。(需求不能改变

  当出现并发操作时,A从数据库中获取最近一条订单的订单号为N,这是A还没有完成新订单的插入操作。B用户进来,也获取最近一条订单的订单号为N,这是A和B 想数据库同事插入的订单就有相同的订单号码。

 

解决方法1:

  程序用同步锁控制(synchronized),性能急剧下降了,本身 java 就是多线程的,你把它单线程使用,不是明智的选择,同时,如果分布式部署的时候,加了 synchronized  也无法控制并发。

 

解决方法2:

  redis 自增。将订单号自增字段,交给redis管理。

 

解决方法3:

  乐观锁:(可能睡涉及到多次提交,用户体验性差)。

 

解决方法4:

  数据库行锁:行锁的同时,可能会影响其他程序对数据库的操作。

 

解决方式5:

  数据库(唯一性约束UNIQUE KEY),由于订单号不能重复,当插入相同的订单号码,就会产生错误。

 

转载于:https://www.cnblogs.com/chihirotan/p/6483890.html

你可能感兴趣的文章
2019.1.22 工作日志
查看>>
Spring-AOP基础
查看>>
九度oj 题目1499:项目安排
查看>>
内置函数
查看>>
深度剖析collections模块
查看>>
BZOJ_1018_[SHOI2008]_交通堵塞traffic_(线段树)
查看>>
PyCharm Change Font Size
查看>>
理解Python中的__init__和__new__
查看>>
None.js 第六步 Stream(流)
查看>>
ajax:error:function (XMLHttpRequest, textStatus, errorThrown) 中status、readyState和textStatus状态意义...
查看>>
Day4 数据类型
查看>>
【转】Nicescroll滚动条插件的用法
查看>>
Redis复制与可扩展集群搭建(转)
查看>>
软件工程概论第六章--面向对象基础
查看>>
网络传输方式的分类
查看>>
思1-基本三观
查看>>
angularJS--apply() 和digest()方法
查看>>
Alpha 冲刺 (5/10)
查看>>
PHP函数之$_SERVER
查看>>
利用安装光盘创建本地yum源补装 RPM 软件包-通过命令行模式
查看>>