雪花算法
雪花算法
标准雪花 ID 与基因雪花 ID 的生成、解析与验证能力
雪花算法
bamboo-base 提供两套 ID 能力:
- 标准雪花 ID:
SnowflakeIdGenerator+SnowflakeUtil - 基因雪花 ID:
GeneSnowflakeUtil(在标准雪花基础上嵌入 8 位业务基因)
标准雪花结构(64 位)
[1-bit sign][41-bit timestamp][5-bit datacenter][5-bit machine][12-bit sequence]| 段 | 位数 | 范围 | 说明 |
|---|---|---|---|
| sign | 1 | 固定 0 | 保证正数 |
| timestamp | 41 | 约 69 年 | 相对 epoch 的时间偏移 |
| datacenter | 5 | 0~31 | 数据中心 |
| machine | 5 | 0~31 | 机器编号 |
| sequence | 12 | 0~4095 | 同毫秒内序号 |
基因雪花结构(64 位)
GeneSnowflakeUtil 会把标准雪花重组为:
[1-bit sign][41-bit timestamp][4-bit machine][8-bit gene][3-bit datacenter][8-bit sequence]这让 ID 自带业务基因(CRC8 计算),可用于业务分片路由与快速归类。
注意:8 位基因存在碰撞概率(理论约 1/256)。
Spring Boot 配置
雪花算法通过 bamboo.base.snowflake 初始化:
bamboo:
base:
snowflake:
datacenter-id: 1
machine-id: 1
epoch: 1690214400000| 配置项 | 默认值 | 说明 |
|---|---|---|
datacenter-id | 1 | 数据中心 ID |
machine-id | 1 | 机器 ID |
epoch | 1690214400000 | 起始纪元(毫秒) |
自动初始化
在 Spring 环境下,SnowflakeUtilInitializer 会在启动时读取配置并调用 SnowflakeUtil.initialize(...)。
在非 Spring 环境下,SnowflakeUtil 会按默认值懒初始化生成器。
快速使用
import com.xlf.utility.utility.SnowflakeUtil;
import com.xlf.utility.utility.GeneSnowflakeUtil;
long id = SnowflakeUtil.generateId();
String idStr = SnowflakeUtil.generateIdString();
long orderId = GeneSnowflakeUtil.generateId("order");
boolean isOrder = GeneSnowflakeUtil.verifyGene(orderId, "order");