2013-07-29 37 views
2

我試圖爲DS中的每個請求生成唯一標識。我正在考慮連接請求收據的隨機整數和時間戳。因爲,得到一個隨機整數可能導致負值我決定打印十六進制表示:爲分佈式系統中的每個請求生成唯一標識

 String randomPrefix = Integer.toHexString(RANDOM.nextInt()).toUpperCase(); 
    java.util.Date date = new java.util.Date(); 
    String timestamp = Long.toHexString(date.getTime()).toUpperCase(); 
    String id = randomPrefix.concat(timestamp);  

我在nt的概率非常好,但我想知道是否有可能導致同樣低的其他操作(或者更好的機會不會看到重複)在這個值與較短的字符串長度。

說起來像一個外行人,連接應該是X重複的機會,而加法會+它(它有更高的重複機會)。

請建議其他方法來產生更清晰,更短的ID(或確認這是否正確)。

P.S:請原諒我的外行語言,在它上面工作。 :(

+1

如果您需要真正獨特的ID,請使用@NKukhar建議的UUID。如果程序運行時你需要一個唯一的ID,你可以增加一個AtomicInteger。 – agbinfo

回答

4

嘗試使用UUID

System.out.println(UUID.randomUUID().toString()); 

版畫一樣的東西:

3aae7d1a-8799-4a6f-8863-cde6b1782e7b 

它如果ids

但是,爲什麼你需要短隨機ID通常的做法是使用?你應該明白,短ID有更多的機會獲得重複,ID通常是方案領域,而不是人。