首页 > 编程语言 >Hutool—雪花算法

Hutool—雪花算法

时间:2023-06-29 16:55:26浏览次数:40  
标签:雪花 Hutool 生成 算法 ID id

一、介绍Hutool工具:

     官网地址:简介 | Hutool

     Hutool是一个Java工具库,其中包含了各种实用的工具类和方法。通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

     Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug

二、雪花算法:

 1.介绍:

      雪花算法(Snowflake)是一种分布式唯一ID生成算法,它可以在分布式系统中生成全局唯一的ID。该算法由Twitter开发,用于解决分布式系统中生成唯一ID的需求。

 2.核心思想:

      雪花算法的核心思想是将一个64位的ID分成多个部分,每个部分表示不同的信息。具体来说,一个雪花ID由以下几个部分组成:

  1. 时间戳:占用41位,表示生成ID的时间戳,精确到毫秒级别。这样可以保证在同一毫秒内生成的ID是唯一的。

  2. 机器ID:占用10位,表示生成ID的机器的唯一标识。在分布式系统中,每台机器都需要有一个唯一的标识,以防止生成重复的ID。

  3. 序列号:占用12位,表示同一毫秒内生成的多个ID的序列号。当同一毫秒内生成的ID超过4096个时,序列号会从0开始重新计数。

     通过将时间戳、机器ID和序列号组合起来,就可以生成一个全局唯一的ID。

     优点:生成的ID有序、趋势递增,并且在分布式系统中具有较高的性能和可靠性。

     缺点:雪花算法并不是绝对的全局唯一,因为机器ID需要保证唯一性,而且系统时钟需要保证准确性。如果机器ID重复或者系统时钟回拨,都有可能导致生成重复的ID。

因此,在使用雪花算法时,需要确保机器ID的唯一性,并且对系统时钟进行合理的同步和校准。

三、Hutool实现雪花算法的方式:

 1.pom文件

<dependency>
   <groupId>cn.hutool</groupId>
   <artifactId>hutool-all</artifactId>
   <version>5.8.16</version>
</dependency>

2.代码实现:

public class SnowFlakeUtil {

    public static void main(String[] args) {
        //参数1:workerId 终端ID
        //参数2:dataCenterId 数据中心id
        Snowflake snowflake = IdUtil.createSnowflake(1,1);
        long id = snowflake.nextId();
        System.out.println("雪花算法1(每次生成一个新对象)实现:"+id);

        Snowflake secondSnow = IdUtil.getSnowflake(1,1);
        String secondId = secondSnow.nextIdStr();
        System.out.println("单例雪花算法2实现:"+secondId);

        //注:该方法只能在最新版本5.8.16版本
        long threeSnow = IdUtil.getSnowflakeNextId();
        System.out.println("单例雪花算法3实现(5.8.16版本):"+threeSnow);
    }
}

四、源码翻看:

版本:5.8.16

1. 创建雪花算法的基础方法:

 

createSnowflake(long workerId, long datacenterId) 方法,是每次调用都会创建一个新的Snowflake对象,不同的Snowflake对象创建的ID可能会有重复 getSnowflake() 系列方法,是单例的,是推荐方法

2.getSnowflakeNextId() 和 getSnowflakeNextStr(),这两个是新版本增加的方法,默认调用的是getSnowflake()方法,生成id

 

ps:发现了一个解决雪花算法重复问题的解决方案,只是做个记录,具体还得看实际。笔者认为参考博客的解决思路很好,下面是链接

参考连接:(84条消息) 线上使用雪花算法生成id重复问题_snowflake算法出现id重复_Dongguo丶的博客-CSDN博客

标签:雪花,Hutool,生成,算法,ID,id
From: https://www.cnblogs.com/wll-cs/p/17514389.html

相关文章

  • 代码随想录算法训练营第二十天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索
    669.修剪二叉搜索树思路递归法: 需要思考清楚,如果当前节点<low,那么就返回递归它的右节点,而不是自己取判断,找出来一个合适的节点,这样的话会越想越乱代码:1TreeNode*trimBST_cursor(TreeNode*root,intlow,inthigh){2if(!root)returnnullptr;34if......
  • 负载均衡算法
    轮询(RoundRobin):每一次来自网络的请求轮询分配给内部中的服务器,从1至N然后重新开始。此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。权重(Weight):根据服务器的不同处理能力,给每个服务器分配不同的权重,使其能够接受相应权值数的服务......
  • 深入学习 GC 算法 - 标记清除算法
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌......
  • 算法中的七大查找方法
    算法中有多种查找方法,常见的有:顺序查找:从一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。二分查找:在有序的数组中,确定中间的下标mid=(left+right)/2,然后让需要查找的数findVal和arr[mid]比......
  • 深入学习 JVM 垃圾回收算法
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌......
  • 人工智能领域涉及多种算法和技术。以下是一些常见的人工智能算法
    人工智能领域涉及多种算法和技术。以下是一些常见的人工智能算法:机器学习算法:监督学习:包括决策树、支持向量机、随机森林、神经网络等。无监督学习:包括聚类算法(如K均值聚类、层次聚类)、关联规则挖掘、主成分分析等。强化学习:通过与环境的交互来学习最优策略,如Q-learning、深度强化......
  • 技术岗/算法岗面试如何准备?5000字长文、6个角度以2023秋招经历分享面试经验
    技术岗/算法岗面试流程是什么样的?技术面都干什么?Coding机试如何准备?技术面考察哪些知识,如何准备?项目八股如何准备?简历要注意什么?怎么做?大家好,我是卷了又没卷、薛定谔的卷的大厂算法工程师「陈城南」。本文会从以上6个问题,全方位、全过程的对技术岗/算法岗校招进行介绍,......
  • 文心一言 VS 讯飞星火 VS chatgpt (50)-- 算法导论6.2 2题
    二、参考过程MAX-HEAPIFY,写出能够维护相应最小堆的MIN-HEAPIFY(A,i)的伪代码,并比较MIN-HEAPIFY与MAX-HEAPIFY的运行时间。文心一言:MIN-HEAPIFY(A,i)的伪代码如下:1.将节点i及其子树中的最小元素交换到根节点i;2.对于左子树,递归调用MIN-HEAPIFY(A,2i);3.对于右子树,递归调......
  • 文心一言 VS 讯飞星火 VS chatgpt (50)-- 算法导论6.2 2题
    二、参考过程MAX-HEAPIFY,写出能够维护相应最小堆的MIN-HEAPIFY(A,i)的伪代码,并比较MIN-HEAPIFY与MAX-HEAPIFY的运行时间。文心一言:MIN-HEAPIFY(A,i)的伪代码如下:1.将节点i及其子树中的最小元素交换到根节点i;2.对于左子树,递归调用MIN-HEAPIFY(A,2i);3.对于右子树,递归调用MIN-H......
  • m基于NB-IoT网络的SWAP资源分配优化算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要       NB-IoT是一种新兴的低功耗广域物联网(LPWAN)通信技术,它可以实现低功耗、低成本、大容量和广覆盖的特点,适用于物联网应用场景。在NB-IoT网络中,由于物联网设备的数量较大、通信频率较低......