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);

         

  • 相关阅读:
    poj3614 Sunscreen 题解报告
    poj2299 Ultra-QuickSort 题解报告
    poj3784 Running Median 题解报告(对顶堆)
    CH103 Cinema 题解报告
    poj1845 Sumdiv 题解报告
    poj2018 Best Cow Fences 题解报告
    $CF311B Cats Transport$ 斜率优化
    斜率优化入门题:任务安排$123$ : )
    $Poj1821 Fence $单调队列优化$DP$
    《算法竞赛》$0×00$基本算法
  • 原文地址:https://www.cnblogs.com/jianchileiliang/p/6796590.html
Copyright © 2011-2022 走看看