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

网友投稿 296 2023-03-14


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

方案一:

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

Syshttp://tem.out.println("Pid is:" + pid);

java获取mac地址

InetAddress ia = InetAddress.getLocalHost();

byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();

String macStr = DatatypeConverter.printHexBinary(mac);

总结

以上所述是给大家介绍的java web在高并发和分布式下实现订单号生成唯一的解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:聊天接口测试用例(接口测试用例编写范文)
下一篇:java接口开发框架(java 接口实现接口)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~