竹简文档
雪花算法

雪花算法

标准雪花 ID 与基因雪花 ID 的生成、解析与验证能力

雪花算法

bamboo-base 提供两套 ID 能力:

  • 标准雪花 IDSnowflakeIdGenerator + SnowflakeUtil
  • 基因雪花 IDGeneSnowflakeUtil(在标准雪花基础上嵌入 8 位业务基因)

标准雪花结构(64 位)

[1-bit sign][41-bit timestamp][5-bit datacenter][5-bit machine][12-bit sequence]
位数范围说明
sign1固定 0保证正数
timestamp41约 69 年相对 epoch 的时间偏移
datacenter50~31数据中心
machine50~31机器编号
sequence120~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 初始化:

application.yml
bamboo:
  base:
    snowflake:
      datacenter-id: 1
      machine-id: 1
      epoch: 1690214400000
配置项默认值说明
datacenter-id1数据中心 ID
machine-id1机器 ID
epoch1690214400000起始纪元(毫秒)

自动初始化

在 Spring 环境下,SnowflakeUtilInitializer 会在启动时读取配置并调用 SnowflakeUtil.initialize(...)
在非 Spring 环境下,SnowflakeUtil 会按默认值懒初始化生成器。

快速使用

Example.java
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");

下一步

On this page