用Java实现分布式高并发有序的唯一id生成器
时间: 2023-01-28 07:02:27 浏览: 207
可以使用 Twitter 的 Snowflake 算法来实现分布式高并发有序的唯一 ID 生成器。
Snowflake 算法由三部分组成:
1. 时间戳 - 指当前时间,占用 41 个二进制位。
2. 机器 ID - 可以使用机器的 IP 地址或其他方式生成,占用 10 个二进制位。
3. 序列号 - 由于同一时间戳下有可能会产生多个 ID,所以需要一个序列号来区分这些 ID,占用 12 个二进制位。
将这三部分组合起来,就可以生成一个唯一的、有序的、64 位的 ID。
下面是 Java 代码的实现:
```
import java.time.Instant;
public class SnowflakeIdGenerator {
// 开始时间戳 (2020-01-01)
private static final long START_TIMESTAMP = 1577836800000L;
// 机器 ID 占用的位数
private static final long WORKER_ID_BITS = 10L;
// 序列号占用的位数
private static final long SEQUENCE_BITS = 12L;
// 机器 ID 最大值
private static final long MAX_WORKER_ID = ~(-1L << WORKER_ID_BITS);
// 序列号最大值
private static final long MAX_SEQUENCE = ~(-1L << SEQUENCE_BITS);
// 机器 ID 左移位数
private static final long TIMESTAMP_LEFT_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS;
// 时间戳左移位数
private static final long WORKER_ID_LEFT_SHIFT = SEQUENCE_BITS;
// 当前时间戳
private long timestamp = -1L;
// 当前机器 ID
private long workerId;
// 当前序列号
private long sequence = 0L;
public SnowflakeIdGenerator(long workerId) {
if (workerId > MAX_WORKER_ID || workerId < 0
阅读全文