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



我正在尝试为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重复的机会,而加法则是+(重复的机会更高)。

请建议其他方法来获得更干净、更短的ID(或确认这是否正确)。

p.S:请原谅我在这方面的外行语言

尝试使用UUID

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

打印类似以下内容:

3aae7d1a-8799-4a6f-8863-cde6b1782e7b

将if用于ids 是一种常见的做法

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

最新更新