高併發下怎麼生成惟一訂單號

方案一:java

  若是沒有併發的話,訂單號只在一個線程中產生,不一樣訂單的時間戳不一樣,    redis

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

   若是有併發的話,而且訂單號在同一臺主機產生多個進程,只要把進程的ID添加到序列號中就能夠保證訂單號惟一。jvm

     若是有併發,訂單在不一樣主機中,把IP地址  CPU序列號  能區分的號碼添加到序列號中就能保證惟一。spa

 

 方案二: 線程

       時間戳+用戶ID+隨機數+樂觀鎖進程

方案三: get

   能夠用redis的原子遞增,作高可用集羣string

方案四:class

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

相關文章
相關標籤/搜索