【发布时间】:2012-05-27 15:08:54
【问题描述】:
我需要为我的 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 有助于处理峰值负载。
我认为这是不正确的,可能会导致重复。
谁能提供一个好的快速算法吗?
【问题讨论】:
-
一些数学运算:16^9/600000/365=313 年。为什么不是一个简单的计数器?
-
是什么让您认为您的解决方案可能会导致重复?
-
你应该避免使用
System.nanoTime(): stas-blogspot.blogspot.it/2012/02/… blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks
标签: java algorithm uniqueidentifier