springboot中使用雪花算法生成雪花id(代码片段)

随风丶飘 随风丶飘     2023-04-05     625

关键词:

目录

1、什么是雪花算法

2、雪花算法的优缺点

3、spring boot项目中使用雪花算法使用


1、什么是雪花算法

雪花算法(Snowflake)是一种生成全局唯一ID的算法,由Twitter公司开发。它可以在分布式系统中生成全局唯一的ID,解决分布式系统中的数据合并和分片等问题。

雪花算法生成的ID是一个64位的长整型数字,由以下部分组成:

  1. 1个bit:符号位,始终为0。

  2. 41个bit:时间戳,精确到毫秒级别,可以使用69年。

  3. 10个bit:工作机器ID,可以部署在1024个节点上。

  4. 12个bit:序列号,每个节点每毫秒内最多可以生成4096个ID。

雪花算法生成ID的过程非常简单,首先记录一个开始时间,然后每次生成ID时计算当前时间和开始时间之间的时间差,将时间戳和工作机器ID、序列号组合成一个64位的长整型数字,返回给调用方。

雪花算法是一种高效、可靠的全局唯一ID生成算法,已经被广泛应用于分布式系统中。

2、雪花算法的优缺点

优点:

  1. 全局唯一:雪花算法生成的ID是全局唯一的,可以用于分布式系统中的数据分片和数据合并,避免了ID冲突的问题。

  2. 时间有序:雪花算法生成的ID中包含了时间戳信息,可以根据ID的大小推算出生成的时间,方便进行数据排序和查询。

  3. 高性能:雪花算法生成ID的速度很快,可以满足高并发的场景需求。

  4. 可扩展性:雪花算法的数据结构相对简单,易于扩展和修改。

缺点:

  1. 依赖于系统时钟:雪花算法生成ID的过程中依赖于系统时钟,如果系统时钟发生回拨,可能会导致生成的ID出现重复。

  2. 长度固定:雪花算法生成的ID长度固定为64位,可能会导致存储和传输成本较高。

  3. 不支持分布式计算:雪花算法生成ID的过程是单线程的,不能支持分布式计算。

        雪花算法是一种高效、可靠的全局唯一ID生成算法,但需要注意时钟回拨和长度固定等缺点。在选择ID生成算法时,需要综合考虑应用场景和需求,选择适合的算法。

3、spring boot项目中使用雪花算法使用

1、引入雪花算法依赖

<dependency>
    <groupId>com.github.beyondfengyu</groupId>
    <artifactId>snowflake-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

2、在配置文件中配置雪花算法参数

在 application.yml 或 application.properties 中配置Snowflake算法的参数:

snowflake:
  data-center-id: 1 # 数据中心ID,可以使用机器IP地址最后一段数字,范围为0-31
  machine-id: 1 # 机器ID,可以使用服务器编号,范围为0-31

3、注入雪花算法对象

在需要生成唯一ID的类中,使用 @Autowired 注解注入 SnowflakeIdWorker 对象:

@Service
public class UserService 
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;

    public Long generateUserId() 
        return snowflakeIdWorker.nextId();
    

使用snowflakeIdWorker.nextId()方法既可以获取生成的雪花ID。

springboot分布式全局唯一id的生成-雪花算法snowflake

一背景描述1.1问题产生在分布式系统中,怎么使用全局唯一id?在分布式是,微服务的架构中,或者大数据分库分表中,多个不同节点怎么保持每台机器生成的主键id不重复,具有唯一性?方案1:mys... 查看详情

mybatis-plus--使用雪花算法生成主键id--使用/分析(代码片段)

原文网址:MyBatis-Plus--使用雪花算法生成主键ID--使用/分析_IT利刃出鞘的博客-CSDN博客简介说明    本文介绍MyBatis-Plus如何使用其自带的雪花算法生成主键ID。MyBatis-Plus自带的雪花算法MyBatis-Plus自带雪花算法MyBatis-Plus默认使用... 查看详情

雪花算法生成的id,前端无法使用(代码片段)

由于前端Number类型长度不够,所以雪花算法生成的ID,传递给前端就会精度丢失。解决方案:@ConfigurationpublicclassJacksonConfig@Bean@Primary@ConditionalOnMissingBean(ObjectMapper.class)publicObjectMapperja 查看详情

分布式id生成方案:雪花算法(源自twitter)

参考技术A雪花(snowflake)在自然界中,是极具独特美丽,又变幻莫测的东西:雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。算法描述:snowflake.gomain.go测试结果:结论: 查看详情

id号生成雪花算法

参考技术A1、twitter的SnowFlake生成ID能够按照时间有序生成2、SnowFlake算法生成id的结果是一个64bit大小的整数3、分布式系统内不会产生重复id(用有datacenterId和machineId来做区分)datacenterId(分布式)(服务ID1,2,3.....)每个服务中... 查看详情

php实现生成唯一id的雪花算法

参考技术A公司需求.生成唯一id用作兑换卡的id,所以就想用雪花算法,写了一个乞丐版的雪花算法,做个记载 查看详情

id生成算法-雪花算法(snowflake)及代码实现(代码片段)

...,常见的方式大概有以下三种:依赖数据库,使用如MySQL自增列或Oracle序列等。UUID随机数snowflake雪花算法(本文将要讨论)一、ID生成算法对比采用数据库自增序列读写分离时, 查看详情

java实现雪花算法(snowflake)-生成永不重复的id(源代码+工具类)使用案例(代码片段)

...换成字符串后长度最多19),其基本结构:第一位:为未使用第二部分:41位为毫秒级时间(41位的长度可以使用69年)第三部分:5位datacenterld和5位workerld(10位的长度最多支持部署1024个节 查看详情

java实现雪花算法(snowflake)-生成永不重复的id(源代码+工具类)使用案例(代码片段)

...换成字符串后长度最多19),其基本结构:第一位:为未使用第二部分:41位为毫秒级时间(41位的长度可以使用69年)第三部分:5位datacenterld和5位workerld(10位的长度最多支持部署1024个节 查看详情

结合redis在spring架构体系中使用雪花算法(代码片段)

...利弊。这里记录下在工作中我结合Redis在Spring架构体系中使用雪花算法生成分布式ID的方式。一、代码部分importlombok.extern.slf4j.Slf4j;importorg.springframework.data.redis.core.StringRedisTemplate;importorg.springframework.s 查看详情

雪花算法:分布式唯一id生成利器(代码片段)

...的生成,都是软件开发人员经常会面临的一场景。而雪花算法便是这些场景的一个解决方案。以分布式ID为例,它的生成往往会在唯一性、递增性、高可用性、高性能等方面都有所要求。并且在业务处理时,还要防止... 查看详情

雪花算法(代码片段)

...间戳、UUID都不是很可靠。为此,Twitter提出了一种名为“雪花算法”的算法来生成分布式全局唯一ID的算法算法介绍“雪花算法”生成的ID为\\(64\\)位整数,其中,前\\(41\\)位(\\(64\\)位整数第一位表示符号位,不作为开始位)表示... 查看详情

oracleid生成算法——雪花算法(代码片段)

...过长,单纯的就无序这一点,数据库中就不建议使用࿰ 查看详情

oracleid生成算法——雪花算法(代码片段)

...过长,单纯的就无序这一点,数据库中就不建议使用࿰ 查看详情

雪花算法原理解析(代码片段)

...拆分,设置初始值和相同的自增步长。批量申请自增ID。雪花算法。百度UidGenerator算法(基于雪花算法实现自定义时间戳)。美团Leaf算法(依赖于数据库,ZK)。  本文主要介绍SnowFlake算法,是Twitter开源的分布式id生成算法。  其... 查看详情

id生成器雪花算法和雪花算法的sony实现(代码片段)

...年。也就是说一豪秒可以产生409万条消息当然,我们可以使用更长的bit来表示,这个需要考虑业务量了。理论上我们可以实现无线长度的数据,因为只要使用字符串就行。 2雪花算法的sony实现2.1功能描述39位时间戳,8位序列i... 查看详情

雪花算法(代码片段)

...记录可以根据ID号进行推测出来,对于数据敏感场景不宜使用。GUID:采用无意义字符串,数据量增大时造成访问过慢,且不宜排序。雪花算法描述:最高位是符号位,始终为0,不可用。41位的时间序列,精确到毫秒级,41位的长... 查看详情

2022年雪花算法的最大与最小值

参考技术A最高1位固定值0。雪花算法,SnowFlake算法,是Twitter开源的分布式id生成算法。其核心思想就是:使用一个64bit的long型的数字作为全局唯一id。最高1位固定值0,因为生成的id是正整数,如果是1就是负数了。 查看详情