Java 为分布式系统中的每个请求生成唯一ID
我正在尝试为DS中的每个请求生成一个唯一的id。我正在考虑连接一个随机整数和请求接收的时间戳。因为,获取一个随机整数可能会导致负值,所以我决定打印十六进制表示:Java 为分布式系统中的每个请求生成唯一ID,java,string,probability,distributed-computing,hex,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
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,而加法应该是+it(重复发生的几率更高)
请建议其他方法,使ID更干净、更短(或确认是否正确)
附言:请原谅我的外行语言,我正在努力(尝试使用
打印如下内容:
3aae7d1a-8799-4a6f-8863-cde6b1782e7b
对于ids
但是为什么您需要短随机id?您应该了解,使用短id有更多的机会获得重复的id,并且
id
通常是程序的字段,而不是人的字段。如果您需要真正唯一的id,请使用@NKukhar建议的UUID。如果您在程序运行时需要唯一的id,您可以只增加一个原子整数R
3aae7d1a-8799-4a6f-8863-cde6b1782e7b