当前位置: 移动技术网 > IT编程>开发语言>Java > java web在高并发和分布式下实现订单号生成唯一的解决方案

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

2019年07月19日  | 移动技术网IT编程  | 我要评论

方案一:

如果没有并发,订单号只在一个线程内产生,那么由于程序是顺序执行的,不同订单的生成时间戳正常不同,因此用时间戳+随机数(或自增数)就可以区分各个订单。如果存在并发,且订单号是由一个进程中的多个线程产生的,那么只要把线程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);

总结

以上所述是小编给大家介绍的java web在高并发和分布式下实现订单号生成唯一的解决方案,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网