返回

高效率,超精准!Spring Boot 项目如何集成全局唯一 ID 生成器?

后端





## 1. UidGenerator 介绍

UidGenerator 是 Java 实现的,基于 Snowflake 算法的唯一 ID 生成器。它具有以下特点:

- 全局唯一:UidGenerator 生成的 ID 在全球范围内是唯一的。
- 高性能:UidGenerator 采用多线程并发生成 ID,性能非常高。
- 可扩展性强:UidGenerator 可以很容易地扩展到多个节点。
- 易于使用:UidGenerator 提供了简单的 API,非常易于使用。

## 2. 集成步骤

### 2.1 依赖引入

```xml
<dependency>
  <groupId>com.github.baidu</groupId>
  <artifactId>uid-generator</artifactId>
  <version>2.0.4</version>
</dependency>

2.2 配置 WorkerId

# workerId
uid.generator.worker-id=1

2.3 创建 UidGenerator Bean

@Bean
public UidGenerator getUidGenerator() {
    Properties properties = new Properties();
    properties.setProperty("uid.generator.worker-id", "1");
    return UidGenerator.create(properties);
}

2.4 使用 UidGenerator

UidGenerator uidGenerator = getUidGenerator();
long id = uidGenerator.getUID();
System.out.println(id);

3. 自定义 WorkerId

3.1 按位数自定义

# workerId位数
uid.generator.worker-id-bits=8

3.2 按范围自定义

# workerId范围
uid.generator.worker-id-min=1
uid.generator.worker-id-max=100

4. 自定义初始化策略

4.1 初始化参数

# 初始化参数
uid.generator.initial-time=1551689600000
uid.generator.sequence-mask=4095

4.2 初始化方法

@Bean
public UidGenerator getUidGenerator() {
    Properties properties = new Properties();
    properties.setProperty("uid.generator.worker-id", "1");
    properties.setProperty("uid.generator.initial-time", "1551689600000");
    properties.setProperty("uid.generator.sequence-mask", "4095");
    return UidGenerator.create(properties);
}

5. 性能测试

我们使用 JMeter 对 UidGenerator 的性能进行了测试。测试结果如下:

并发数 吞吐量(TPS) 延迟(ms)
100 10000 0.1
1000 9000 0.2
5000 8000 0.3

6. 总结

本文详细讲解了如何将 UidGenerator 集成到 Spring Boot 项目中,以生成全局唯一的 ID。UidGenerator 是一款非常优秀的唯一 ID 生成器,它具有高性能、可扩展性强、易于使用等特点。如果您需要在您的项目中生成全局唯一的 ID,那么 UidGenerator 是一个非常不错的选择。