我想生成唯一的ID就像java中的自动增量一样.所以以前我使用当前纳秒秒,但我最终得到冲突,因为两个数据在相同的纳秒时间内出现.. UUID是否解决了上述问题?
注意::在我的项目中,我甚至可以每分钟获得10000行记录,我会将这些记录与UIDS一起转储到表中.可能会出现这样的情况:我会停止我的产品并在一段时间后重新启动它....所以在那种情况下,UUID类如何澄清先前生成的UID(我存储在DB中)将要创建的新UID(尚未转储到DB中)?
我非常怀疑你在同一纳秒内得到两条记录,因为调用System.nanoTime()需要100 ns.您的时钟更有可能没有纳秒精度.
但是,如果重新启动服务器,则可以重复nanoTime().
解决这个问题的一种方法是使用
AtomicLong counter = new AtomicLong(System.currentTimeMillis()*1000);
long id = counter.incrementAndGet();
// something like ctz9yamgu8
String id = Long.toString(counter.incrementAndGet(), 36);
Run Code Online (Sandbox Code Playgroud)
这将在应用程序重新启动时启动计数器,并且它们在重新启动之间不会重叠,除非您每秒持续超过一百万个ID.(在实例的生命周期内)
注意:这仅适用于每个实例.多个服务器需要使用不同的方法.
| 归档时间: |
|
| 查看次数: |
12616 次 |
| 最近记录: |