雪花算法,如果同一毫秒内有大量请求,是否会生成重复ID?

如题,我知道雪花算法主要的组成是时间戳(ms)+机器ID+序号,如果在同一毫秒内,有大量的几十亿的请求,导致序号超出最大值会怎么办呢?是归0还是时间戳+1呢?

阅读 2.1k
2 个回答

如果你指 Twitter 开源的那个,那么答案是不会。但有很多类似的实现方案,往往也都会被叫做雪花算法,因为我没有一一研究过,所以无法给你准确的答案。

超过了就会等待下一毫秒到来后再生成。

P.S. 你要非说十几亿请求同一毫秒到达、并且你只有一个每毫秒只能生成 4095 个 ID 的单节点再硬抗、还想阻塞时间尽可能短,那我只能说这方案就离谱。

在雪花算法中,生成的id由时间戳(毫秒级)、数据中心ID、机器ID和序列号组成。如果在同一毫秒内,同一个数据中心ID、同一台机器ID上生成的序列号超过了4096(序列号为12位,最大值为4095),那么会发生id重复的情况。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏