首页
学习
活动
专区
圈层
工具
发布

常见的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生成,我才了解的。

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

    【Rust项目推荐】使用Rust生成Youtube风格的ID

    如果前端通过字母ID请求资源,后端拿到字母ID后通过某种规则将其解码为数字ID,然后再通过该数字ID去数据库读取数据。这种做法在一定程度上可以防止直接使用自增ID带来的问题。...一篇博文给出了一种可行的实现方式,看起来效果不错。这篇文章已经是5年前的了,博主使用php实现了初版,然后各路网友给出了由不同语言实现的版本。...不过由于是依样画葫芦,没能完全理解其中的原理,笔者也是很担忧这东西能不能在实际项目中使用,毕竟如果生成的ID有重复,又或是解码结果和原数字ID不一致的话就凉凉了。所以写完就那么放着了。...好了我们来说下具体实现,假如我们要用abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-_来表示生成ID,用一位字母就可以表示0...随着位数的增加,可以表示的数字也越来越大。理论上,如果对生成字母长度不设上限,可以表示无穷大。

    86010

    MongoDB 自增 id 的生成

    概述 我们使用 MySQL 等关系型数据库时,主键都是设置成自增的。 但在分布式环境下,尤其是在分库分表以后,单纯的自增主键会产生冲突,需要考虑如何生成唯一 ID。...前9个字节就保证了同一秒钟不同机器不同进程产生的 ObjectId 是唯一的。 而最后三个字节则在每一个进程中通过生成随机数,并以此为基础自增,确保相同进程的同一秒产生的ID也是不同的。...MongoDB 的哲学 这样设计的主键 ID 从根本上保证了其唯一性,也因此可以不必由 MongoDB 服务器生成,通常,主键 _id 的生成都是由客户端的驱动程序完成的。...MongoDB 允许我们自己生成 _id,但是这样唯一性的压力就又来了,在并发环境下保证自增 ID 的严格自增与避免 ID 冲突有时是需要丰富的经验的。 5....创建 collection 我们先创建一个自动增长 id 的集合: > db.ids.save({name:"user", id:0}); > db.ids.find(); { "_id" : ObjectId

    8.5K30

    常见的全局ID生成方案

    在分布式系统架构中,经常都需要一个全局的ID生成器,来保证系统中某些业务场景中对于主键的要求,当前实现ID生成的方式还是挺多的。本文我们来谈谈常见的ID生成方式。...全局ID该有的特性 唯一性: 确保生成的ID为全网唯一 有序性: 确保ID对于某项业务来说是有序性递增的 时间戳: 可清楚知道ID生成的时间点 高可用性: 确保任何时间都能生成有效ID 常见的ID生成方式...数据库自增 mysql数据库使用auto_increment 字段来辅助为ID自增。 oracle数据库通过创建sequence 来生成ID自增。...其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位...id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。

    1.3K20

    python使用UUID库生成唯一ID

    IDentifier C# 中叫 GUID 它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。...可以保证全球范围内的唯一性,但MAC的使用同时带来安全性问题,局域网中可以使用IP来代替MAC。...2、uuid2()——基于分布式计算环境DCE(Python中没有这个函数) 算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。实际中很少用到该方法。...3、uuid3()——基于名字的MD5散列值 通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。...5、uuid5()——基于名字的SHA-1散列值 算法与uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法 使用方面: 首先,Python中没有基于DCE的,所以uuid2

    1.3K10

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

    此时一个能够生成全局唯一ID的系统是非常必要的。概括下来,那业务系统对ID号的要求有哪些呢? 全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。...同时除了对ID号码自身的要求,业务还对ID号生成系统的可用性要求极高,想象一下,如果ID生成系统瘫痪,整个美团点评支付、优惠券发券、骑手派单等关键动作都无法执行,这就会带来一场灾难。...数据库生成 以MySQL举例,利用给字段设置auto_increment_increment和auto_increment_offset来保证ID自增,每次业务使用下列SQL读写MySQL得到ID号。...Leaf-snowflake方案 Leaf-segment方案可以生成趋势递增的ID,同时ID号是可计算的,不适用于订单ID生成场景,比如竞对在两天中午12点分别下单,通过订单id号相减就能大致计算出公司一天的订单量...所以使用Zookeeper持久顺序节点的特性自动对snowflake节点配置wokerID。

    3.9K41

    雪花算法下的ID生成工具类

    对于常用的算法生成的根据当前日期等生成的IP,在分布式环境下都有可能出现重复的状况。...雪花算法生成唯一ID SnowFlake的结构如下(每部分用-分开): 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000...,而是存储时间截的差值(当前时间截 - 开始时间截) 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)...41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69 10位的数据机器位,可以部署在1024个节点,包括5位datacenterId...; /** * 毫秒内序列(0~4095) */ private long sequence = 0L; /** * 上次生成ID的时间截 *

    88210

    使用注解自动生成代码

    于是小明发明了一套基于 Annotation Processor 和编译时注解实现的自动生成工厂类代码的方案 首先自定义一个注解类 @CarAnnotation @Target(AnnotationTarget.CLASS...,只不过这一切都是自动生成的,后面如果有新增品牌的汽车,只需要在新的子类上面,加上 CarAnnotation 注解即可,再也不用担心忘记在工厂类中新增模板代码的问题。...编译器首先会读取 Java/Kotin 源文件,然后查看文件中是否有使用注解,如果有使用,则调用其对应的注释处理器,这个注解处理器(可能会)生成新的带有注解的 Java 源文件,生成的新文件也会参与编译...com.example.code.CarAnnotationProcessor 或者使用 google 的自动注册处理器库,加上一个注解@AutoService(Processor::class)就可以了...生成代码 JavaPoet 和 KotlinPoet 是一个生成 Java/Kotlin 代码的库 在上面的例子中,我们需要扫描出所有标注了 @CarAnnotation 注解的类,然后自动生成一个

    1.1K00

    Intellij IDEA用快捷键自动生成序列化id

    最终效果: 类继承了Serializable接口之后,使用alt+enter快捷键自动创建序列化id  idea默认设置没有开启:alt+enter (不同系统和自定义的配置可能会快捷键可能略有不同)发现并没有提供...进入setting→inspections→serialization issues→选择图中的选项。...直接在左上角的搜索栏输入也可以。 注意:这里Profile尽量选择Default,当做默认选项,否则只对当前项目有效,新打开或者创建的项目不生效。...然后在类名上alt+enter  选择如下选项即可: 另外推荐  Idea的官方文档,里面有很多高级技巧。.../details/89163627 如果觉得本文对你有帮助,欢迎点赞评论,欢迎关注我,我将努力创作更多更好的文章。

    6.6K10

    Flink SQL 算子生成固定 ID 的方法总结

    如果用户没有显式指定算子的 ID,Flink 会根据拓扑结构,自动为算子生成自己的 ID。...例如,用户稍微修改了一下 SQL 代码,或者升级了 Flink 版本,都可能导致运行图发生变化,自动生成的算子 ID 不再与之前的保持一致,从而造成快照无法恢复的后果。...该提案的核心技术点仍然是根据一定规则来生成 Transformation 的 uid,从而保证运行图算子 ID 的固定化。...只要 Plan 文件的格式是兼容的,算子 ID 的生成规则固定,就可以保障最后的运行图算子的逻辑和 ID 的稳定性。...总结 本文讲解了 Flink 算子 ID 的用途、生成逻辑,以及不匹配的后果,并从流程上分析了如何显式给 SQL 语句生成的各项结构设置固定的 uid,随后还介绍了 Flink 社区对此问题的应对思路,

    2.2K21
    领券