java中根据当前时间毫秒和uuid生成一个不会重复的long类型数据最为唯一主键id
时间: 2024-09-24 09:11:31 浏览: 48
在Java中,为了生成一个基于当前时间和UUID的、几乎不可能重复的long类型唯一标识符作为主键ID,你可以结合`System.currentTimeMillis()`获取当前时间的毫秒数和`java.util.UUID`生成的全局唯一的UUID值。以下是一个简单的示例:
```java
import java.time.Instant;
import java.util.UUID;
public class UniqueIdGenerator {
public static long generateUniqueId() {
Instant now = Instant.now();
UUID uuid = UUID.randomUUID();
// 使用当前毫秒数和UUID的时间部分作为长整型主键ID
long timestampMicroseconds = now.getEpochSecond() * 1000000 + now.getNano() / 1000; // 转换微秒
return (timestampMicroseconds << 32) | uuid.getMostSignificantBits(); // 左移32位并组合
}
}
```
这个生成的ID将包含当前的日期时间信息以及一个随机的部分,可以极大地减少冲突发生的可能性。然而,虽然概率极低,理论上两个请求几乎同时发生且产生的UUID完全一样,还是存在极小几率造成重复。如果你需要更高的独特性和更低的冲突率,可以考虑采用数据库提供的自增序列或其他形式的分布式唯一ID生成机制。
阅读全文