收藏好项目:UidGenerator:百度开源的 Java 实现的、基于 Snowflake 算法的唯一 ID 生成器

UidGenerator 是 Java 实现的,基于 Snowflake 算法的唯一 ID 生成器。

UidGenerator 以组件形式工作在应用项目中,支持自定义 workerId 位数和初始化策略,从而适用于 docker 等虚拟化环境下实例自动重启、漂移等场景。

在实现上,UidGenerator 通过借用未来时间来解决 sequence 天然存在的并发限制;采用 RingBuffer 来缓存已生成的 UID,并行化 UID 的生产和消费,同时对 CacheLine 补齐,避免了由 RingBuffer 带来的硬件级「伪共享」问题。最终单机 QPS 可达 600 万。

https://github.com/baidu/uid-generator

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成年月日加6位流水唯一 ID,可以考虑使用 Snowflake 算法Snowflake 算法是 Twitter 开源的分布式 ID 生成算法,使用一个 64 位的 long 型数字作为全局唯一 ID。具体实现可以使用 Java 来完成。 在 Java 中,可以使用 Snowflake 算法实现一个分布式 ID 生成器,具体步骤如下: 1. 定义一个 Snowflake 类,包含以下属性: - 起始的时间戳(epoch) - 机器 ID - 序列号 2. 在 Snowflake 类中实现一个 nextId() 方法,该方法包含以下步骤: - 获取当前时间戳(毫秒级) - 如果当前时间戳小于上一次生成 ID 的时间戳,则说明系统时钟回退过,抛出异常 - 如果当前时间戳等于上一次生成 ID 的时间戳,则将序列号加 1 - 如果当前时间戳大于上一次生成 ID 的时间戳,则将序列号重置为 0,并更新上一次生成 ID 的时间戳为当前时间戳 - 生成一个 64 位的 long 型数字,其中高位为当前时间戳,中间位为机器 ID,低位为序列号 - 返回生成的 ID 3. 在应用程序中使用 Snowflake 类的 nextId() 方法生成唯一 ID。 由于 Snowflake 算法生成的 ID 中包含时间戳信息,因此可以保证生成的 ID 有序递增。同时,Snowflake 算法中使用了位运算和异或运算,可以保证在分布式环境下生成的 ID 不重复。 如果要使用 Snowflake 算法实现分布式并发,需要注意以下几点: - 每个机器的机器 ID 必须唯一 - 同一机器上的线程调用 nextId() 方法时,需要考虑线程安全问题 - 不同机器上的应用程序调用 nextId() 方法时,需要考虑网络延迟和时钟不同步问题 以上是使用 Java 实现年月日加6位流水唯一 ID 的思路,具体实现可以参考 Snowflake 算法开源实现

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值