首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

常见的ID生成策略 – IdUtil – Hutool的ID生成工具

本页目录 IdUtil案例 常见ID生成策略 UUID ❄️雪花算法(我觉得了解再多,还得是万能的雪花算法❄️) MongoDB唯一主键 Redis自增主键策略 IdUtil案例 演示了:UUID、nanoID...生成工具,就在这里统一搜集整理一些常见的ID策略 常见ID生成策略 UUID 案例:144985ec-458d-49c5-8338-ba325eca5322 特点:无序、数字与小写英文、长度36位 缺点...:无序、长度太长,超低概率可能会重复 ❄️雪花算法(我觉得了解再多,还得是万能的雪花算法❄️) 特点:纯数字、自增、每秒26万个ID、长度19 雪花算法是推特公司开源的工具:想了解前往本站:https:...一个是机器ID,另一个是数据中心ID(两个ID均是数字)。 保证线程安全,务必获取单例对象!上文案例就是单例对象,随便使用!...MongoDB唯一主键 这里是Hutool工具集成的MongoDB唯一ID生成,我才了解的。

9K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ID生成策略——SnowFlake

    二、常见的ID生成策略 1、数据库自增ID(前面提到了) 2、UUID 算法的核心思想是结合机器的网卡、当地时间、一个随记数来生成UUID。...二进制中最高位为1的都是负数,但是我们生成id都使用正数,所以这个最高位固定是0 41位,用来记录时间戳(毫秒)。...强依赖时钟在有些情况下很致命,我个人就遇到过服务器刚重启的短时间时间没有同步,造成生成ID出问题的情况!...可以考虑借助ID时间戳部分实现均匀分布 (1)分库分表逻辑使用ID时间戳部分做取模。这个方法需要把10进制ID转成2进制,然后移位,再进行计算。...比较麻烦 (2)生成ID的时候把序列号部分尾数用时间戳对应的位置覆盖。截段代码,这段代码的取值能保证ID除以128的余数均匀分布。 ?

    1.8K10

    全局id如何生成

    很多时候我们都需要生成一个全局id用于数据存储的主键,那么如何生成一个全局id呢?有哪些方法?优缺点是啥?...1.数据库自增id 我们需要一个单独的表给我们专门生成自增id,每次到这个专门生成id的表里插入一条数据拿回id,带着这个id去新增自己分表数据; 优点:方便简单,谁都会用; 缺点: 1.单库生成自增...你可以将别的业务字段值跟当前时间拼接起来,组成一个全局唯一的编号,订单编号,时间戳 + 用户id + 业务含义编码 4.snowflake算法 twitter开源的分布式id生成算法,就是把一个64位的...因为二进制里第一个bit为如果是1,那么都是负数,但是我们生成id都是正数,所以第一个bit统一都是0 41 bit:表示的是时间戳,单位是毫秒。...2.雪花算法依赖系统的时间一致性,如果系统时间被回调,可能会出现id重复导致主键冲突的情况。另外分布式系统中,各节点的时间并不能保证完全同步,所以有可能出现分布式系统中不能出现完全递增的情况。

    1.5K50

    分布式ID生成

    ⽣成ID性能⾮常好,基本不会有性能问题。 全球唯⼀,在遇⻅数据迁移,系统数据合并,或者数据库变更等情况下,可以从容应对。 缺点: 没有排序,⽆法保证趋势递增。...性能不够要求的时候,我们可以尝试使⽤Redis来⽣成ID。...这主要依赖于Redis是单线程的, 所以也可以⽤⽣成全局唯⼀的ID。可以⽤Redis的原⼦操作 INCR和INCRBY来实现。 优点: 不依赖于数据库,灵活⽅便,且性能优于数据库。...数字ID天然排序,对分⻚或者需要排序的结果很有帮助。 缺点: 如果系统中没有Redis,还需要引⼊新的组件,增加系统复杂度。 需要编码和配置的⼯作量⽐较⼤。 ⽹络传输造成性能下降。...雪花算法(分布式自增长ID https://blog.csdn.net/lydms/article/details/124696135

    13030

    MongoDB 自增 id生成

    但在分布式环境下,尤其是在分库分表以后,单纯的自增主键会产生冲突,需要考虑如何生成唯一 ID。 这一点上,mongodb 预先考虑到并采取措施保证了分布式环境中生成id 的唯一性。...与此同时,在 _id 中已经保存了时间信息,让我们可以轻易的获取到文档首次插入的时间: > objid = new ObjectId() > ObjectId("53102b43bf1044ed8b0ba36b...MongoDB 的哲学 这样设计的主键 ID 从根本上保证了其唯一性,也因此可以不必由 MongoDB 服务器生成,通常,主键 _id生成都是由客户端的驱动程序完成的。...自己生成自增 id — findAndModify 虽然已经有很多生成自增 id 的方案可供选用,如依赖 redis 等,但 MongoDB 本身提供了原子操作,我们可以通过 MongoDB 提供的原子操作来实现...通过 php 生成 MongoDB 自增 id <?

    7.9K30

    MyChat 采用雪花算法生成 ID

    MyChat 群组 ID生成 每个群组在创建时由后端分配 ID, 这个 ID 考虑到后面的集群情况, 所以需要做到全局唯一, 所以这里使用了雪花算法来实现 ?...生成工具 * * * 欢迎跟我一起学习,微信(lvgocc)公众号:星尘的一个朋友 * * @author lvgorice@gmail.com * @version 1.0 *...=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=雪花算法分段各部分长度信息↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=*/ /** * 时间部分所占长度...(); /** * 一毫秒内的序列号 */ private static long sequence = 0; /** * 上次生成序列号时间(毫秒...synchronized static long nextId() { long now = System.currentTimeMillis(); // 如果小于上次生成时间

    75420

    游戏后台生成唯一ID

    UUID方式生成ID比较长,通常需用字符串表示,作为内存数据主键或者数据库主键它的查找效率比不上直接使用整数类型生成ID做主键。...SnowFlake算法是twitter开源的分布式ID生成算法,它是一个本地生成算法,它可以生成一个64位的整数,具体生成的64位ID结构如下图: snowflake.png SnowFlake...下面讲述一种MMO中的分布式ID生成方式,它会生成一个64位的整数ID,核心思想与SnowFlake类似。同时会根据游戏的特性对64位ID中的位段进行相应的调整。...实例ID:同一类型的进程的不同实例编号 校验序号:这个序号在每次进程重启时就自增1,数据会写入本地文件中 序列号:同一时间生成ID会自增序列号 自适应时间:进程启动时初始化为当前时间时间戳(秒级别的...另外这种方式生成的UID通常用于角色ID,物品ID等,单秒内生成量是可以预估的,从而事先调整UID的各个段的位数来满足业务需求。

    2.8K00

    分布式ID生成总结

    3.系统时间+拼接业务字段值 例如:当前时间戳 + 用户id + 业务含义编码,并发高的时候,会有重复,此时就不行了,不建议使用。...依赖于redis,redis要是不稳定,会影响ID生成。...1 bit:不用 因为二进制里第一个bit为如果是1,那么都是负数,但是我们生成id都是正数,所以第一个bit统一都是0 41 bit:表示的是时间戳,单位是ms 41 bit可以表示的数字多达2^41...- 1,也就是可以标识2 ^ 41 - 1个毫秒值,换算成年就是表示69年的时间 10 bit:记录工作机器id 代表的是这个服务最多可以部署在2^10台机器上,也就是1024台机器,但是10 bit...如果某台机器的系统时钟回拨,有可能造成ID冲突,或者ID乱序、ID重复 优点: 生成ID时不依赖于数据库,完全在内存生成,高性能高可用 容量大,每秒可生成几百万ID ID呈趋势递增,后续插入数据库的索引树的时候

    59120

    【工具类】雪花算法生成id

    雪花算法生成id package com.xiepanpan.utils; import java.lang.management.ManagementFactory; import java.net.InetAddress...* 这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分), * 并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要...// 时间起始标记点,作为基准,一般取系统的最近时间(一旦确定不能变动) private final static long twepoch = 1288834974657L; // 机器标识位数...static long datacenterIdShift = sequenceBits + workerIdBits; // 时间毫秒左移22位 private final static...偏移组合生成最终的ID,并返回ID long nextId = ((timestamp - twepoch) << timestampLeftShift)

    1.2K10

    常见分布式id生成方案_分布式id生成方案

    ID生成器。...时间戳部分(41bit):毫秒级的时间,不建议存当前时间戳,而是用(当前时间戳 – 固定开始时间戳)的差值,可以使产生的ID从更小的值开始;41位的时间戳可以使用69年,(1L << 41) / (1000L...long nextId() { long currentTimestamp = currentTimeMillis(); //如果当前时间小于上一次ID生成时间戳,说明系统时钟回退过这个时候应当抛出异常...Refusing to generate id"); } //如果是同一时间生成的,则进行毫秒内序列 if (currentTimestamp == lastTimestamp) { //相同毫秒内...如果恰巧回退前生成过一些ID,而时间回退后,生成ID就有可能重复。官方对于此并没有给出解决方案,而是简单的抛错处理,这样会造成在时间被追回之前的这段时间服务不可用。

    92130

    Python-唯一ID-01-生成唯一ID

    系统:Windows 10 编辑器:JetBrains PyCharm Community Edition 2018.2.2 x64 这个系列讲讲和唯一ID相关的一些操作 今天讲讲如何生成 Part 1...ID在不同表之间是重复的,那如果有一个个性的需求,需要手动生成一个不重复的ID,如何实现 Part 2:方法1 通过时间序列生成ID,已用户的操作时刻生成一串数字,理论上同一毫秒进行操作的概率不大,当然也不是严格没有可能...import datetime def get_unique_id(): """ 根据时间生成唯一ID :return: """ current_time =..."{0}".format(str_time) return unique_id id_only = get_unique_id() id_used = "T-{0}".format(id_only...) print(id_used) 图2 运行结果 Part 3:方法2 uuid包实现,是根据当前时间和设备MAC地址生成的,这样两台不同的电脑生成id肯定是不同的 import uuidid_1

    2K10

    全局唯一 ID 服务的分布式ID生成系统

    此时一个能够生成全局唯一ID的系统是非常必要的。概括下来,那业务系统对ID号的要求有哪些呢? 全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。...同时除了对ID号码自身的要求,业务还对ID生成系统的可用性要求极高,想象一下,如果ID生成系统瘫痪,整个美团点评支付、优惠券发券、骑手派单等关键动作都无法执行,这就会带来一场灾难。...类snowflake方案 这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等,比如在snowflake...Leaf-snowflake方案 Leaf-segment方案可以生成趋势递增的ID,同时ID号是可计算的,不适用于订单ID生成场景,比如竞对在两天中午12点分别下单,通过订单id号相减就能大致计算出公司一天的订单量...一定程度上提高了SLA 解决时钟问题 因为这种方案依赖时间,如果机器的时钟发生了回拨,那么就会有可能生成重复的ID号,需要解决时钟回退的问题。 ?

    3.5K41

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券