雪花算法!

雪花算法

在雪花算法中,生成的64位ID的首位是0,这是因为最高位是符号位,0表示正数,1表示负数。在生成ID时,我们通常希望ID是正数,所以首位是0。

优点:

  1. 高并发分布式环境下生成不重复ID: 雪花算法可以在高并发的分布式环境中生成不重复的ID。每个ID都包含了机器标识、时间戳和序列号,确保在同一毫秒内生成的ID不会冲突。

  2. 有序递增: ID中包含了时间戳和序列号,因此生成的ID基本上是有序递增的。这对于某些场景,如数据库索引的性能,可能是有利的。

  3. 不依赖第三方库或中间件: 雪花算法是一种纯粹的算法实现,不依赖外部的第三方库或中间件,使得集成和部署相对简单。

  4. 算法简单、效率高: 雪花算法的实现相对简单,且在内存中进行,因此具有较高的效率。

缺点:

  1. 依赖服务器时间: 雪花算法的唯一性依赖于服务器的时钟,如果服务器的时钟发生回拨,可能导致生成重复的ID。为了解决这个问题,需要在算法中记录最后一个生成ID时的时间戳,并在每次生成ID之前检查当前服务器时钟是否被回拨,以避免生成重复的ID。

位数表示

  1. 符号位(1位): 最高位是符号位,对于正整数而言,固定为0,以保证生成的ID是正数。

  2. 时间戳(41位): 这部分存储的是当前时间戳,通常以毫秒为单位。由于41位的长度,可以表示的时间范围是2^41毫秒,大约69年。这意味着在同一台机器上,每毫秒都可以生成一个唯一的时间戳。

  3. 机器码(10位): 这包括5位的数据中心ID(datacenterId)和5位的工作机器ID(workerId)。这样设计允许在分布式系统中有多个数据中心,每个数据中心可以部署多台机器,每台机器有唯一的workerId。这样,整个系统就支持了2^10=1024台机器。

  4. 序列号(12位): 在同一毫秒时间戳内,通过序列号来区分不同的ID。这部分允许同一机器在同一毫秒内生成多个ID。序列号的长度为12位,因此在同一毫秒内,最多可以生成2^12=4096个不重复的ID。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码有点萌

谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值