mysql数据库,建立一个独立的数据库,对应一个独立的微服务。
通过id表和分布式锁实现分布式id。

建立一个id表

CREATE TABLE `rys_distribute_id` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(64) NOT NULL DEFAULT '' COMMENT 'id名称',`init_value` int(11) NOT NULL DEFAULT '0' COMMENT 'id初始值',`current_value` int(11) NOT NULL COMMENT 'id当前值',`del_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记(0-否,1-是)',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',PRIMARY KEY (`id`),KEY `idx_type` (`init_value`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='分布式id';

service提供接口

@Service
public class DistributeIdService {@Autowiredprivate DistributeIdMapper distributeIdMapper;@Autowiredprivate RedisLockRegistry redisLockRegistry;public Integer getNextId(String idName) {Lock lock = redisLockRegistry.obtain(idName);lock.lock();try {DistributeId distributeId = distributeIdMapper.getByName(idName);//不存在,设置初始值if (distributeId == null) {distributeId = new DistributeId();distributeId.setName(idName);distributeId.setInitValue(DistributeIdConstant.INIT_VALUE);distributeId.setCurrentValue(distributeId.getInitValue());distributeIdMapper.insert(distributeId);return distributeId.getCurrentValue();}//存在,当前值+1else {DistributeId update = new DistributeId();update.setId(distributeId.getId());update.setCurrentValue(distributeId.getCurrentValue() + 1);distributeIdMapper.updateById(update);return update.getCurrentValue();}} finally {lock.unlock();}}
}

id名称常量,添加一个id,旧加一个常量值

public interface DistributeIdConstant {int INIT_VALUE = 100001;String RESOURCE_ID = "RESOURCE_ID";
}

包装成feign接口,提供出去。

也可以每个服务都起一套,这样每个人使用独立,更方便。看自己习惯。

https://github.com/mingwulipo/activiti-modeler-demo

分布式id-数据库实现相关推荐

  1. 分布式系统概念 | 分布式ID:数据库、号段模式、雪花算法(Snowflake)、Redis实现方案

    文章目录 分布式ID 数据库 自增ID 多主模式 号段模式 雪花算法 Redis 总结 分布式ID ID是数据的唯一标识,传统的做法是使用数据库的自增ID,但是随着业务规模的不断发展,数据量将越来越大 ...

  2. 美团 Leaf分布式ID解决方案

    前言 看了一下美团的分布式ID的解决方案,谈谈自己的理解和思考.其中参考博客就是美团的分布式ID leaf的链接,可以直接跳转去看. Leaf-segment 数据库方案 这里采用的是从数据库读取,每 ...

  3. MySQL分布式ID_分布式唯一ID系列(3)——数据库自增ID机制适合做分布式ID吗

    数据库自增ID机制原理介绍 在分布式里面,数据库的自增ID机制的主要原理是:数据库自增ID和mysql数据库的replace_into()函数实现的.这里的replace数据库自增ID和mysql数据 ...

  4. 分布式ID(数据库多主模式,这些知识点你会吗

    CREATE TABLE SEQID.SEQUENCE_ID ( id bigint(20) unsigned NOT NULL auto_increment, stub char(10) NOT N ...

  5. 最新高频Java面试题目分享,分布式ID(数据库多主模式

    三.号段模式 我们可以使用号段的方式来获取自增ID,号段可以理解成批量获取,比如DistributIdService从数据库获取ID时,如果能批量获取多个ID并缓存在本地的话,那样将大大提供业务应用获 ...

  6. 分布式ID(唯一性)的生成方法汇总

    欢迎关注方志朋的博客,回复"666"获面试宝典 在软件研发工程中,经常会遇到系统主键的唯一性问题,尤其是在现如今比较火热的微服务架构中.分布式ID 具备唯一性.高可用性.有序增长等 ...

  7. 分布式 id 生成器

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 本文来源: www.juejin.im/post/5d8882d8 ...

  8. 美团(Leaf)分布式ID生成器,好用的一批!

    不了解分布式ID的同学,先行去看<一口气说出 9种 分布式ID生成方式,面试官有点懵了>温习一下基础知识,这里就不再赘述了 美团(Leaf) Leaf是美团推出的一个分布式ID生成服务,名 ...

  9. 分布式id生成策略,我和面试官扯了一个半小时

    面试官:小伙子,你还记得我吗?我是上次面试你的那个面试官. 我心想:我去,怎么会不记得,我又不是青年痴呆,上次害我画了那么多图,还使劲敲了一个多钟的电脑,满脑子都是你的阴影. 我:记得记得,您好,很高 ...

  10. 一口气说出 9种 分布式ID生成方式,面试官有点懵了

    写在前边 前两天公众号有个粉丝给我留言吐槽最近面试:"四哥,年前我在公司受点委屈一冲动就裸辞了,然后现在疫情严重两个多月还没找到工作,接了几个视频面试也都没下文.好多面试官问完一个问题,紧接 ...

最新文章

  1. Git本地仓库与远程仓库关联
  2. Netty学习笔记(四)EventLoopGroup续篇
  3. 【HDU - 5988】Coding Contest(网络流费用流,改模板)
  4. C语言指针原来也可以这么的通俗易懂!
  5. 游戏中的“战争黑雾”和现实中的程序员处境
  6. TQuery组件的Open方法与ExecSQL的区别
  7. php连接mysql数据库失败_PHP远程连接MySQL数据库失败之原因
  8. android方法的初始化,Android小技巧:自动初始化Library
  9. 【转】android实现退出整个工程
  10. python pyqt eric_python+PyQT+Eric安裝配置 | 學步園
  11. 递归法:求两个串的最大公共子序列的长度
  12. c++如何生成指定范围的随机数
  13. 千古第一文人苏轼的众CP
  14. ios 渐变透明背景_2019 - 渐变梯度
  15. AI Illustrator 中钢笔工具在绘制过程中如何使用
  16. 知乎大V推荐!如何在面试中通过工厂模式来给自己加分?圆我大厂梦!
  17. bequeath_conn
  18. 软件测试管理工具——禅道(安装、讲解)
  19. Python爬虫与信息提取(五)爬虫实例:爬取新浪微博热搜排名
  20. 使用JDBC的基本步骤

热门文章

  1. 计算机网络学习笔记(10. 速率、带宽、延迟)
  2. 数据库---连接查询,数据表之间的并交集关系
  3. JavaScript学习(四十八)—原型对象的增删改查
  4. python做定时任务的方式及优缺点_使用Python做定时任务及时了解互联网动态
  5. 人到了中年在职场中就应该保持内敛的心态
  6. 为何现在好多饭店熬汤不用骨头也能熬出来浓白色的汤?
  7. 为什么农产品电商不好做
  8. 西贝莜面村如何建立自己的私域流量池?
  9. 赚钱的公式是资源加经营
  10. 代码有多干净和直观?