1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 雪花算法(id生成算法)

雪花算法(id生成算法)

时间:2022-09-17 13:55:24

相关推荐

雪花算法(id生成算法)

SnowFlake 雪花算法

SnowFlake 中文意思为雪花,故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在开源 scala 语言版本。

实现原理

雪花算法原理就是生成一个的64位比特位的 long 类型的唯一 id。

最高1位固定值0,因为生成的 id 是正整数,如果是1就是负数了。

接下来41位存储毫秒级时间戳,以当前的时间作为值,所以是时刻改变的。2^41/(1000606024365)=69,大概可以使用69年。

再接下10位存储机器码,这是为了防止多台机器同时申请id,所以以每个机器的地址来做标记。包括5位 datacenterId 和5位 workerId。最多可以部署2^10=1024台机器。

最后12位存储序列号。同一毫秒时间戳时,通过这个递增的序列号来区分。为了解决一台机器同时申请id。即对于同一台机器而言,同一毫秒时间戳下,可以生成2^12=4096个不重复 id。

算法优缺点

优点:

高并发分布式环境下生成不重复 id,每秒可生成百万个不重复 id。

基于时间戳,以及同一时间戳下序列号自增,基本保证 id 有序递增。

不依赖第三方库或者中间件。

算法简单,在内存中进行,效率高。

缺点:

依赖服务器时间,服务器时钟回拨时可能会生成重复 id。算法中可通过记录最后一个生成 id 时的时间戳来解决,每次生成 id 之前比较当前服务器时钟是否被回拨,避免生成重复 id。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。