Package uno.xifan.id.generator.js
Class JavaScriptSafetyIdGenerator
java.lang.Object
uno.xifan.id.generator.js.JavaScriptSafetyIdGenerator
- All Implemented Interfaces:
IdGenerator
生成适用于 JavaScript 的安全 ID 的生成器类。
生成的 ID 为 53 位,这种长度的 ID 可以在 JavaScript 中安全使用,因为 JavaScript 中 Number 类型的整数安全范围是 53 位。
ID 结构:
- 高位 37 位:时间戳部分,将当前时间戳除以 16 后存储,这样做可以延长时间戳的使用年限,避免在短时间内出现溢出。
- 低位 16 位:随机数部分,用于增加 ID 的唯一性。
生成算法:
1. 获取当前时间戳(以毫秒为单位)。
2. 将时间戳右移 4 位,相当于除以 16。
3. 将处理后的时间戳左移 16 位,为随机数部分腾出空间。
4. 生成一个 16 位的随机数。
5. 将处理后的时间戳和随机数进行按位或操作,组合成最终的 53 位 ID。
-
Constructor Summary
ConstructorsConstructorDescriptionJavaScriptSafetyIdGenerator(long epoch) JavaScriptSafetyIdGenerator(Random random) 构造函数,使用默认纪元时间初始化生成器JavaScriptSafetyIdGenerator(Random random, long epoch) 构造函数,使用指定的纪元时间初始化生成器 -
Method Summary
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface uno.xifan.id.base.IdGenerator
generate
-
Constructor Details
-
JavaScriptSafetyIdGenerator
public JavaScriptSafetyIdGenerator() -
JavaScriptSafetyIdGenerator
public JavaScriptSafetyIdGenerator(long epoch) -
JavaScriptSafetyIdGenerator
构造函数,使用默认纪元时间初始化生成器- Parameters:
random- 随机数生成器对象
-
JavaScriptSafetyIdGenerator
构造函数,使用指定的纪元时间初始化生成器- Parameters:
random- 随机数生成器对象epoch- 自定义的纪元时间戳(毫秒)
-
-
Method Details
-
next
public static long next()静态方法,用于生成一个 53 位的 JavaScript 安全 ID。- Returns:
- 生成的 53 位 ID
-
monotonic
public static long monotonic() -
next
public static long[] next(int count) 批量生成指定数量的 53 位 JavaScript 安全 ID。- Parameters:
count- 需要生成的 ID 数量- Returns:
- 生成的 53 位 ID 数组
- Throws:
IllegalArgumentException- 如果 count 小于等于 0
-
generate
实现 IdGenerator 接口的方法,用于生成一个 53 位的 JavaScript 安全 ID。- Specified by:
generatein interfaceIdGenerator- Returns:
- 生成的 53 位 ID
-
idType
获取生成的 ID 类型。- Specified by:
idTypein interfaceIdGenerator- Returns:
- ID 类型为 JavaScriptSafetyID
-