为分布式系统中的每个请求生成唯一ID

时间:2013-07-29 21:57:37

标签: java string probability distributed-computing hex

我正在尝试为DS中的每个请求生成唯一ID。我正在考虑连接请求收据的随机整数和时间戳。因为,获得一个随机整数会导致负值我决定打印十六进制表示:

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

我在概率上非常擅长,但我想知道是否有其他操作可能会导致此值中的字符串长度更短(或甚至更好的机会看不到重复)。

说话就像一个门外汉,连接应该是X复发的机会,而加法会+它(它有更高的重复机会)。

请建议其他方法,以获得更清洁和更短的身份证明(或确认这是否正确)。

P.S:请原谅我的外行语言。 :(

1 个答案:

答案 0 :(得分:4)

尝试使用UUID

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

打印类似:

3aae7d1a-8799-4a6f-8863-cde6b1782e7b

ids

使用if是一种常见做法

但为什么你需要短随机ID?你应该明白,使用短ID会有更多机会获得重复,ID通常是程序的字段而不是人。