新建 SnowflakeIdGenerate.ts
// src/utils/Snowflake.ts
/**
* Snowflake主键生成算法
* 完整的算法是生成的ID长度为20位
* 但是由于js最大值9007199254740991,再多就会溢出,再多要特殊处理。
* 所以这里设置长度为16位id。将数据中心位调小到1位,将服务器位调小到1位,将序列位调小到10位
* 这意味着最多支持两个数据中心,每个数据中心最多支持两台服务器
*/
export class SnowflakeIdGenerate {
private twepoch = 0;
private workerIdBits = 1;
private dataCenterIdBits = 1;
private maxWrokerId = -1 ^ (-1 << this.workerIdBits); // 值为:1
private maxDataCenterId = -1 ^ (-1 << this.dataCenterIdBits); // 值为:1
private sequenceBits = 10;
private workerIdShift = this.sequenceBits; // 值为:10
private dataCenterIdShift = this.sequenceBits + this.workerIdBits; // 值为:11
// private timestampLeftShift =
// this.sequenceBits + this.workerIdBits + this.dataCenterIdBits; // 值为:12
private sequenceMask = -1