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

方案一:

如果没有并发,订单号只在一个线程内产生,那么由于程序是顺序执行的,不同订单的生成时间戳正常不同,因此用时间戳+随机数(或自增数)就可以区分各个订单。如果存在并发,且订单号是由一个进程中的多个线程产生的,那么只要把线程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在高并发和分布式下实现订单号生成唯一的解决方案,希望对大家有所帮助

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值