纯干货:SpringCloud分布式ID解决方案

前言

分布式系统中,分布式ID是个必须解决的问题点;

雪花算法是个好方式,不过不能直接使用,因为如果直接使用的话,需要配置每个实例workerId和datacenterId,在微服务中,实例一般动态配置,直接指定具体实例的这两个参数是不现实的;

  所以,一般采用雪花算法的变种,主要是将这两个参数由手动配置改为动态生成,美团leaf、百度uid-generator都属于改良的变种算法,可以适当采用;

  不过这些算法都或多或少对其他存在一定依赖,不是非常方便,今天我们来说一种非常方便的分布式ID解决方案,那就是mybatis plus 内置的方式;

 项目中基本都会使用到MYSQL,ORM无疑mybatis plus是最好用的;所以这种分布式ID方式很多时候都能在项目中采用;它实际也是雪花算法的变种,它采用网卡序列号等来动态生成workerId和datacenterId,在分布式的系统中,是可以保证ID唯一性的;

编辑切换为居中

添加图片注释,不超过 140 字(可选)

实现

1-1、添加依赖

 
 

<!-- 9、集成mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency>

1-2、添加配置

mybatis plus使用前面有介绍过,请参考:https://www.cnblogs.com/yanghj/p/12446686.html

1-3、使用

 两种方式:

一种是数据库自动生成并插入,这种方式在插入数据库时,数据库自动生成并插入,无需用户手动填写,这种方式我们实际很少使用,因为在插入后才能拿到该ID,但是很多时候,我们在插入前就需要用到该ID,用来做其他关联业务处理,所以手动插入比较实用点;

一种是手动插入方式:ID用mybatis plus来生成,然后再塞入ID字段中;

 
 

/** * 编号 */ @TableId(value = "id",type = IdType.INPUT) //2、该注解表示ID手动填入 //@TableId(value = "id",type = IdType.ASSIGN_ID) //1、该注解表示ID自动生成并插入,无需用户填写 private Long id;

手动插入时,写个IDhelper生成ID,代码如下:

 
 

package com.anson.utils; import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import java.util.UUID; /** * 描述: ID生成 * 版权: Copyright (c) 2020 * 公司: XXX * 作者: yanghj * 版本: 4.0 * 创建日期: 2020/9/16 9:59 */ public class IDhelper { //用mybatis-plus生成Long ID public static Long getNextId() { IdentifierGenerator identifierGenerator=new DefaultIdentifierGenerator(); Number id= identifierGenerator.nextId(new Object()); Long nextid = Long.parseLong(id+""); return nextid; } }

使用的时候:

 
 

Long id = IDhelper.getNextId();

总结

  使用到MySQL数据库的系统,这种分布式ID解决方案无疑是目前最方便的方案,当然,也可以采用其他方案;自由选择。

如果感觉本文对你有帮助,关注我一起学习进步

 

                                                        资源获取:
大家 点赞、收藏、关注、评论啦 、 查看👇🏻👇🏻👇🏻 微信公众号获取联系方式👇🏻👇🏻👇🏻
精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值