Class JavaScriptSafetyIdGenerator

java.lang.Object
uno.xifan.id.generator.js.JavaScriptSafetyIdGenerator
All Implemented Interfaces:
IdGenerator

public class JavaScriptSafetyIdGenerator extends Object implements 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 Details

    • JavaScriptSafetyIdGenerator

      public JavaScriptSafetyIdGenerator()
    • JavaScriptSafetyIdGenerator

      public JavaScriptSafetyIdGenerator(long epoch)
    • JavaScriptSafetyIdGenerator

      public JavaScriptSafetyIdGenerator(Random random)
      构造函数,使用默认纪元时间初始化生成器
      Parameters:
      random - 随机数生成器对象
    • JavaScriptSafetyIdGenerator

      public JavaScriptSafetyIdGenerator(Random random, long epoch)
      构造函数,使用指定的纪元时间初始化生成器
      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

      public Object generate()
      实现 IdGenerator 接口的方法,用于生成一个 53 位的 JavaScript 安全 ID。
      Specified by:
      generate in interface IdGenerator
      Returns:
      生成的 53 位 ID
    • idType

      public IdType idType()
      获取生成的 ID 类型。
      Specified by:
      idType in interface IdGenerator
      Returns:
      ID 类型为 JavaScriptSafetyID