idgenerator 会重复吗_时钟回拨问题咋解决?百度开源的唯一ID生成器UidGenerator

UidGenerator是百度基于Snowflake算法的Java实现,用于生成唯一ID,尤其适合虚拟环境。它通过消费未来时间解决时钟回拨问题,采用RingBuffer提高QPS。UidGenerator分为DefaultUidGenerator和CachedUidGenerator,后者通过RingBuffer预生成ID,避免实时计算,提升性能。同时,UidGenerator的workerId通过数据库自增ID分配,确保不同实例的ID不冲突。
摘要由CSDN通过智能技术生成

UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器。而且,它非常适合虚拟环境,比如:Docker。另外,它通过消费未来时间克服了雪花算法的并发限制。UidGenerator提前生成ID并缓存在RingBuffer中。 压测结果显示,单个实例的QPS能超过6000,000。

依赖环境:JDK8+

MySQL(用于分配WorkerId)

snowflake

由下图可知,雪花算法的几个核心组成部分:1位sign标识位;

41位时间戳;

10位workId(数据中心+工作机器,可以其他组成方式);

12位自增序列;

但是百度对这些组成部分稍微调整了一下:

由上图可知,UidGenerator的时间部分只有28位,这就意味着UidGenerator默认只能承受8.5年(2^28-1/86400/365)。当然,根据你业务的需求,UidGenerator可以适当调整delta seconds、worker node id和sequence占用位数。

接下来分析百度UidGenerator的实现。需要说明的是UidGenerator有两种方式提供:和DefaultUidGenerator和CachedUidGenerator。我们先分析比较容易理解的DefaultUidGenerator。

DefaultUid

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值