spring boot中使用雪花算法生成雪花ID

这篇具有很好参考价值的文章主要介绍了spring boot中使用雪花算法生成雪花ID。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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。文章来源地址https://www.toymoban.com/news/detail-785122.html

到了这里,关于spring boot中使用雪花算法生成雪花ID的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • gin-vue-admin二开使用雪花算法生成唯一标识 id

    需求场景: 总部采集分支的数据,由于分支的 id 是子增的主键 id,所以会出现重复的 id,但是这个 id 需要作为标识,没有实际作用,这里选择的是分布式 id 雪花算法生成 id 存储用来标识,这个项目基于 gva 进行开发的,可以使用 sonyflake 和 snowflake 两个实现方式都可以解决

    2024年01月17日
    浏览(35)
  • 雪花算法生成唯一数字id

    2024年02月02日
    浏览(47)
  • 分布式ID生成算法——雪花算法

    一、分布式ID ID可以唯一标识一条记录。 对于单体架构,我们可以使用自增ID来保证ID的唯一性。但是,在分布式系统中,简单的使用自增ID就会导致ID冲突。这也就引出了 分布式ID 问题。分布式ID也要求满足分布式系统的 高性能、高可用、高并发 的特点。 二、雪花算法 世界

    2024年02月06日
    浏览(47)
  • 分布式ID生成算法:雪花算法

    雪花算法(Snowflake)是一种分布式ID生成算法,可以生成唯一的、有序的、不重复的ID号,广泛应用于分布式系统中。其生成的ID号由64位二进制数组成,可以转换成16进制或10进制的字符串表示。 雪花算法的核心思想是将一个64位的二进制数分成四部分,分别表示时间戳、数据

    2024年02月15日
    浏览(37)
  • 分布式ID(2):雪花算法生成ID

    1 雪花算法简介 这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等,比如在snowflake中的64-bit分别表示如下图(图片来自网络)所示: 41-bit的时间可以表示(1L

    2024年01月20日
    浏览(45)
  • 分布式—雪花算法生成ID

    由64个Bit(比特)位组成的long类型的数字 0 | 0000000000 0000000000 0000000000 000000000 | 00000 | 00000 | 000000000000 1个bit:符号位,始终为0。 41个bit:时间戳,精确到毫秒级别,可以使用69年。 10个bit:工作机器ID,可以部署在1024个节点上。 12个bit:序列号,每个节点每毫秒内最多可以生成

    2024年02月11日
    浏览(42)
  • 雪花算法ID生成器工具类

    可以通过配置bean添加到容器,注入使用

    2024年02月15日
    浏览(47)
  • 分布式唯一ID生成算法——雪花算法(SnowFlake)

    SnowFlake算法 据国家大气研究中心的查尔斯·奈特称,一般的雪花大约由10^19个水分子组成。在雪花形成过程中,会形成不同的结构分支,所以说大自然中不存在两片完全一样的雪花,每一片雪花都拥有自己漂亮独特的形状。 雪花算法表示生成的id如雪花般独一无二。 snowflake是

    2023年04月20日
    浏览(45)
  • 雪花算法生成分布式主键ID

    直接上代码,复制即可使用 在这个示例中,你可以通过 SnowflakeIdGenerator.init(dataCenterId, workerId); 初始化数据中心 ID 和工作 ID,然后通过 SnowflakeIdGenerator.generateId(); 静态方法生成 Snowflake ID 的字符串形式。

    2024年02月22日
    浏览(48)
  • 【智能排班系统】雪花算法生成分布式ID

    在复杂而庞大的分布式系统中,确保数据实体的唯一标识性是一项至关重要的任务,生成全局唯一且有序的ID生成机制成为必不可少的环节。雪花算法(Snowflake Algorithm)正是为此目的而生,以其简洁的设计、高效的表现与良好的扩展性赢得了业界的广泛认可。 雪花算法最早由

    2024年04月10日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包