1. 程式人生 > 其它 >高併發下怎麼生成唯一訂單號

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

技術標籤:Javajava

方案一:

如果沒有併發的話,訂單號只在一個執行緒中產生,不同訂單的時間戳不同,

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

如果有併發的話,並且訂單號在同一臺主機產生多個程序,只要把程序的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);
 
轉自:https://www.cnblogs.com/jianchileiliang/p/6796590.html