我需要为满足以下要求的 Java 应用程序生成唯一编号 -
- 9位十六进制
- 每天大约产生 600,000 个数字
- 这些号码必须在至少 7 天内保持唯一;如果他们重复超过 7 天,这不是问题。
- 在峰值负载期间,需要在大约 15 秒内每秒生成大约 800 个唯一号码。
不成功的解决方案 -
public static String getUniqueId() {
String uniqueTime = Long.toHexString(System.nanoTime());
String uniqueId = uniqueTime.substring(uniqueTime.length() - 9);
return uniqueId;
}
使用 nanoTime 生成一个 12 位的十六进制数。我截断了左边的 3 个字符。nanoTime 有助于处理峰值负载。
我认为这是不正确的,可能会导致重复。
谁能提供一个好的快速算法吗?