Java中如何实现高效且唯一的字符串ID生成策略?

2026-05-16 03:570阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计835个文字,预计阅读时间需要4分钟。

Java中如何实现高效且唯一的字符串ID生成策略?

工作中经常会遇到生成唯一字符串的需求。通常最容易想到的是UUID。UUID的唯一性非常强,但32位的长度也可能让人望而却步。也曾想过参考《短网址生成方案》来生成一串ID,但短网址这个说法可能让人误解。

工作中经常会有生成唯一字符串的需求。通常最容易想到的是UUID。UUID的唯一性毋庸置疑,但是32位的长度也容易让人退避三舍。也曾经想过参考《短网址生成方案》来生成一串ID,但是试验了一下发现唯一性不太好。

Java中如何实现高效且唯一的字符串ID生成策略?

最终采用的方案是时钟方案,简单来说就是用当前时间戳做唯一ID。

采用时间戳做ID,秒或毫秒都容易产生重复,换成纳秒在单节点上就没问题了。参考百度百科关于纳秒的描述就能清楚为什么纳秒级别的时间戳不会产生重复:

光在真空中一纳秒仅传播0.3米。个人电脑的微处理器执行一道指令(如将两数相加)约需2至4纳秒。

我们生成一条唯一ID所需的CPU指令绝不止一道,因此用纳秒作单机唯一ID是绰绰有余的。在测试中发现,即使是千分之一纳秒也足够我们在PC机上生成唯一ID了。

至于长度:对原始值做一次Base62处理,长度就能缩减到令人满意的程度。

阅读全文

本文共计835个文字,预计阅读时间需要4分钟。

Java中如何实现高效且唯一的字符串ID生成策略?

工作中经常会遇到生成唯一字符串的需求。通常最容易想到的是UUID。UUID的唯一性非常强,但32位的长度也可能让人望而却步。也曾想过参考《短网址生成方案》来生成一串ID,但短网址这个说法可能让人误解。

工作中经常会有生成唯一字符串的需求。通常最容易想到的是UUID。UUID的唯一性毋庸置疑,但是32位的长度也容易让人退避三舍。也曾经想过参考《短网址生成方案》来生成一串ID,但是试验了一下发现唯一性不太好。

Java中如何实现高效且唯一的字符串ID生成策略?

最终采用的方案是时钟方案,简单来说就是用当前时间戳做唯一ID。

采用时间戳做ID,秒或毫秒都容易产生重复,换成纳秒在单节点上就没问题了。参考百度百科关于纳秒的描述就能清楚为什么纳秒级别的时间戳不会产生重复:

光在真空中一纳秒仅传播0.3米。个人电脑的微处理器执行一道指令(如将两数相加)约需2至4纳秒。

我们生成一条唯一ID所需的CPU指令绝不止一道,因此用纳秒作单机唯一ID是绰绰有余的。在测试中发现,即使是千分之一纳秒也足够我们在PC机上生成唯一ID了。

至于长度:对原始值做一次Base62处理,长度就能缩减到令人满意的程度。

阅读全文