我们在生活中,id 与我们的生活实际上是形影不离的。
身份证号,QQ 号,手机号,银行卡号,学生时代的学号,甚至是躺在你硬盘里的番号。
这些 id 标识是如此的重要,乃至每一个后台程序员都要去思考这个问题—— id 的有几种写法?都有哪些利弊?
本文就带你深入浅出学习几种常见的 id 的生成策略。
由于篇幅优先,建议阅读下面的文章内容。
分布式 id 生成需求
uuid 策略讲解
random 生成策略
snowflake 算法讲解
id 是一款为 java 设计常见 ID 实现策略。
让你在日常开发中可以开箱即用,享受提前下班的快乐~
对于 id 生成,基本是所有后台系统必须面对的问题,分布式 id 的生成也是很常见的一个需求。
最近同事写的代码,在多台机器高并发下产生了序列号冲突。
觉得 id 策略应该聚合成一个工具包,而不是每次重复造轮子,有时候还有问题。
极简 api,一行代码搞定一切
内置多种 id 生成策略,总有一款适合你
jar 包只有 13k
<dependency>
<groupId>com.github.houbbgroupId>
<artifactId>idartifactId>
<version>0.0.2version>
dependency>
final String snowflake = IdHelper.snowflake();
System.out.println(snowflake);
1260199310461505537
所有的 id 都可以通过 IdHelper
直接调用。
序号 | 方法 | 例子 |
---|---|---|
1 | uuid8() | dUlmJiEq |
2 | uuid32() | 3f9afd5773d143fb8e28d80de47f3d1a |
3 | random() | 202005122127270743937635635 |
4 | random(prefix, length) | random("999", 5) 为 9992020051221340961522263 |
5 | snowflake() | 1260199914969849858 |
6 | local() | 从 0 开始,逐渐加 1 的 id 返回 |
snowflake 定制化+代码优化
引入 comb 算法
其他开源 id 的兼容
基于常见数据库的 id 生成
基于 redis 的 id 生成