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

引言

咱们在生活中,id 与咱们的生活其实是如影随行的。java

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

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

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

入门学习

因为篇幅优先,建议阅读下面的文章内容。redis

分布式 id 生成需求算法

uuid 策略讲解数据库

random 生成策略api

snowflake 算法讲解并发

开源工具

id 是一款为 java 设计常见 ID 实现策略。dom

让你在平常开发中能够开箱即用,享受提早下班的快乐~

创做意图

对于 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 生成
相关文章
相关标签/搜索