高並發下怎么生成唯一訂單號


方案一:

  如果沒有並發的話,訂單號只在一個線程中產生,不同訂單的時間戳不同,    

        時間戳+隨機數(自增數)區分訂單

   如果有並發的話,並且訂單號在同一台主機產生多個進程,只要把進程的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);

 

 

 

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM