知者何南 发表于 2024-12-12 22:34:22

java雪花算法

雪花算法适用于高并发、分布式体系中天生唯一标识符。通过公道的位数设计,确保了ID的唯一性和有序性,非常适合需要快速天生唯一ID的场景。
雪花算法是一种分布式唯一ID天生算法,由Twitter开发。它天生的ID是64位的整数,具有时间排序的特性。其结构如下:
```
| 1 bit | 41 bits          | 10 bits          | 12 bits          |
|-------|------------------|------------------|------------------|
| sign| timestamp      | datacenter id    | worker id      | sequence |
```
- **sign(1 bit)**:始终为0,由于雪花算法不需要负数。
- **timestamp(41 bits)**:自界说纪元(如2021年1月1日)以来的毫秒数,最多可以支持69年的时间。
- **datacenter id(10 bits)**:数据中心 ID,最多支持1024个数据中心。
- **worker id(10 bits)**:工作呆板 ID,最多支持1024个工作节点。
- **sequence(12 bits)**:在同一毫秒内天生的序列号,最多支持4096个 ID。
### 雪花算法 Java 实现
public class SnowflakeIdGenerator {// 根本参数private final static long EPOCH = 1609459200000L; // 自界说的开始时间(2021-01-01 00:00:00)private final static long WORKER_ID_BITS = 10; // 工作呆板ID占用的位数private final static long DATACENTER_ID_BITS = 10; // 数据中心ID占用的位数private final static long SEQUENCE_BITS = 12; // 序列号占用的位数// 计算各部分的位移private final static long WORKER_ID_SHIFT = SEQUENCE_BITS; // 序列号位移private final static long DATACENTER_ID_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS; // 数据中心ID位移private final static long TIMESTAMP_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS + DATACENTER_ID_BITS; // 时间戳位移// 天生掩码private final static long MAX_WORKER_ID = ~(-1L
页: [1]
查看完整版本: java雪花算法