zoukankan      html  css  js  c++  java
  • 高并发下怎么生成唯一订单号

    方案一:

      如果没有并发的话,订单号只在一个线程中产生,不同订单的时间戳不同,    

            时间戳+随机数(自增数)区分订单

       如果有并发的话,并且订单号在同一台主机产生多个进程,只要把进程的ID添加到序列号中就可以保证订单号唯一。

         如果有并发,订单在不同主机中,把IP地址  CPU序列号  能区分的号码添加到序列号中就能保证唯一。

     

     方案二: 

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

    方案三: 

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

    方案四:

       java自带的UUID

    实例代码

                     java中获取线程ID

      Thread.currentThread().getId()

                     java 获取进程 ID

      1. //java获取进程ID 2. RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); 3. Field jvm = runtime.getClass().getDeclaredField("jvm"); 4. jvm.setAccessible(true); 5. VMManagement mgmt = (VMManagement) jvm.get(runtime); 6. Method pidMethod = mgmt.getClass().getDeclaredMethod("getProcessId"); 7. pidMethod.setAccessible(true); 8. int pid = (Integer) pidMethod.invoke(mgmt);

          java 获取 mac 地址

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

         

  • 相关阅读:
    叩开抽象的大门(2)——依赖于抽象
    威老迷宫探险第二季如何更面向对象
    更佳的封装之路面向对象的封装思想
    威老的迷宫探险
    重用,我要重用!!!
    威老出国记,什么是引用,别名。
    叩开抽象的大门(1)——抽象类、接口
    maven常用命令
    大公司喜欢问的问题
    java 发送http请求
  • 原文地址:https://www.cnblogs.com/jianchileiliang/p/6796590.html
Copyright © 2011-2022 走看看