欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

java web在高并发和分布式下实现订单号生成唯一的解决方案

时间:2021-08-21 09:10:30|栏目:JAVA代码|点击:

方案一:

如果没有并发,订单号只在一个线程内产生,那么由于程序是顺序执行的,不同订单的生成时间戳正常不同,因此用时间戳+随机数(或自增数)就可以区分各个订单。如果存在并发,且订单号是由一个进程中的多个线程产生的,那么只要把线程ID添加到序列号中就可以保证订单号唯一。如果存在并发,且订单号是由同一台主机中的多个进程产生的,那么只要把进程ID添加到序列号中就可以保证订单号唯一。如果存在并发,且订单号是由不同台主机产生的,那么MAC地址、IP地址或CPU序列号等能够区分主机的号码添加到序列号中就可以保证订单号唯一。

方案二:

时间戳+用户ID+几个随机数+乐观锁。

方案三:

用redis的原子递增,做好高可用集群。

方案四(非纯数字):

java自带uuid。

事例代码

java获取线程ID

Thread.currentThread().getId() 

java获取进程ID

 // get name representing the running Java virtual machine.  
    String name = ManagementFactory.getRuntimeMXBean().getName();  
    System.out.println(name);  
    // get pid  
    String pid = name.split("@")[0];  
    System.out.println("Pid is:" + pid);  

java获取mac地址

InetAddress ia = InetAddress.getLocalHost(); 
byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); 
String macStr = DatatypeConverter.printHexBinary(mac);

总结

上一篇:Spring实现文件上传功能

栏    目:JAVA代码

下一篇:SpringBoot整合阿里云OSS对象存储服务实现文件上传

本文标题:java web在高并发和分布式下实现订单号生成唯一的解决方案

本文地址:http://www.codeinn.net/misctech/168626.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有