引言
我们在生活中,id 与我们的生活实际上是形影不离的。
身份证号,QQ 号,手机号,银行卡号,学生时代的学号,甚至是躺在你硬盘里的番号。
这些 id 标识是如此的重要,乃至每一个后台程序员都要去思考这个问题—— id 的有几种写法?都有哪些利弊?
本文就带你深入浅出学习几种常见的 id 的生成策略。
入门学习
由于篇幅优先,建议阅读下面的文章内容。
开源工具
id 是一款为 java 设计常见 ID 实现策略。
让你在日常开发中可以开箱即用,享受提前下班的快乐~
创作意图
对于 id 生成,基本是所有后台系统必须面对的问题,分布式 id 的生成也是很常见的一个需求。
最近同事写的代码,在多台机器高并发下产生了序列号冲突。
觉得 id 策略应该聚合成一个工具包,而不是每次重复造轮子,有时候还有问题。
特性
-
极简 api,一行代码搞定一切
-
内置多种 id 生成策略,总有一款适合你
- jar 包只有 13k
快速开始
maven 引入
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>id</artifactId>
<version>0.0.2</version>
</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 返回 |
Road-Map
-
[ ] snowflake 定制化+代码优化
-
[ ] 引入 comb 算法
-
[ ] 其他开源 id 的兼容
-
[ ] 基于常见数据库的 id 生成
- [ ] 基于 redis 的 id 生成
来源:oschina
链接:https://my.oschina.net/u/4364241/blog/4278985