Snowflake

    • 41位,用来记录时间戳(毫秒)。

      • 41位 可以表示 2^41 - 1 个数字。
      • 也就是说 41位 可以表示 2^41 - 1 个毫秒的值,转化成单位年则是 (2^41 - 1) / (1000 * 60 * 60 * 24 * 365) 约为 69 年。
    • ,序列号,用来记录同毫秒内产生的不同 id

      • 12位 可以表示的最大正整数是 2^12 - 14095 个数字,来表示同一机器同一时间截(毫秒)内产生的 4095ID 序号。

    Snowflake 可以保证:

    • 所有生成的 ID 按时间趋势递增。

    Hyperf 的 hyperf/snowflake 组件在设计上提供了很好的可扩展性,允许您通过简单的扩展就能实现其它基于 Snowflake 的变体算法。

    框架默认使用的 MetaGeneratorInterface 是基于 实现的 毫秒级别生成器。配置文件位于 config/autoload/snowflake.php,如配置文件不存在可通过执行 php bin/hyperf.php vendor:publish hyperf/snowflake 命令创建默认配置,配置文件内容如下:

    框架中使用 Snowfalke 十分简单,只需要从 DI 中取出 IdGeneratorInterface 对象即可。

    当知道 ID 需要反推对应的 Meta 时,只需要调用 degenerate 即可。