分布式 id 的四种写法,你会吗?

…衆ロ難τιáo~ 提交于 2020-08-06 10:46:19

引言

我们在生活中,id 与我们的生活实际上是形影不离的。

身份证号,QQ 号,手机号,银行卡号,学生时代的学号,甚至是躺在你硬盘里的番号。

这些 id 标识是如此的重要,乃至每一个后台程序员都要去思考这个问题—— id 的有几种写法?都有哪些利弊?

本文就带你深入浅出学习几种常见的 id 的生成策略。

入门学习

由于篇幅优先,建议阅读下面的文章内容。

分布式 id 生成需求

uuid 策略讲解

random 生成策略

snowflake 算法讲解

开源工具

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 生成
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!