Snowflake
41位
,用来记录时间戳(毫秒)。41位
可以表示2^41 - 1
个数字。- 也就是说
41位
可以表示2^41 - 1
个毫秒的值,转化成单位年则是(2^41 - 1) / (1000 * 60 * 60 * 24 * 365)
约为69
年。
,序列号,用来记录同毫秒内产生的不同
id
。12位
可以表示的最大正整数是2^12 - 1
共4095
个数字,来表示同一机器同一时间截(毫秒)内产生的4095
个ID
序号。
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
即可。