使用自定义snowflake算法生成符合要求的ID_小白0806的博客-CSDN博客

使用自定义snowflake算法生成符合要求的ID

问题背景:项目使用snowflake算法生成Id,前端使用该id时因超出JS Number的最大范围,被自动截取。出现多个id重复的现象。

解决思路:需要减小ID长度。分析雪花片算法ID的组成结构,从而得到减小id长度的方法。

SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。由四部分组成:首位无效符、时间戳差值,机器(进程)编码,序列号。
在这里插入图片描述

1 bit:我们生成的id都是正数,所以第一个 bit 统一都是 0。

41 bit:表示的是时间戳,单位是毫秒。41 bit 可以表示的数字多达 2^41 - 1,也就是可以标识 2 ^ 41 - 1 个毫秒值,换算成年就是表示 69 年的时间。

10 bit:其中 5 个 bit 代表机房 id,5 个 bit 代表机器 id。

12 bit:这个是用来记录同一个毫秒内产生的不同 id。12 bit 可以代表的最大正整数是 2 ^ 12 - 1 = 4096,也就是说可以用这个 12 bit 代表的数字来区分同一个毫秒内的 4096 个不同的 id。

因为时间紧,决定使用最粗暴的方法,直接减少时间戳部分的长度,由毫秒改为秒。其他不变。这样修改我是经过业务分析,能保证同时在一秒内生成的id不会超过4096个。

代码如下:(因为内网不方便拷贝,直接截图)
在这里插入图片描述
当然还有其他方式,如果服务器只有一台,那可以直接去掉10bit机器码,也可以降低id长度。


原网址: 访问
创建于: 2022-07-11 09:48:53
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论