分布式id-数据库实现
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-数据库实现相关推荐
- 分布式系统概念 | 分布式ID:数据库、号段模式、雪花算法(Snowflake)、Redis实现方案
文章目录 分布式ID 数据库 自增ID 多主模式 号段模式 雪花算法 Redis 总结 分布式ID ID是数据的唯一标识,传统的做法是使用数据库的自增ID,但是随着业务规模的不断发展,数据量将越来越大 ...
- 美团 Leaf分布式ID解决方案
前言 看了一下美团的分布式ID的解决方案,谈谈自己的理解和思考.其中参考博客就是美团的分布式ID leaf的链接,可以直接跳转去看. Leaf-segment 数据库方案 这里采用的是从数据库读取,每 ...
- MySQL分布式ID_分布式唯一ID系列(3)——数据库自增ID机制适合做分布式ID吗
数据库自增ID机制原理介绍 在分布式里面,数据库的自增ID机制的主要原理是:数据库自增ID和mysql数据库的replace_into()函数实现的.这里的replace数据库自增ID和mysql数据 ...
- 分布式ID(数据库多主模式,这些知识点你会吗
CREATE TABLE SEQID.SEQUENCE_ID ( id bigint(20) unsigned NOT NULL auto_increment, stub char(10) NOT N ...
- 最新高频Java面试题目分享,分布式ID(数据库多主模式
三.号段模式 我们可以使用号段的方式来获取自增ID,号段可以理解成批量获取,比如DistributIdService从数据库获取ID时,如果能批量获取多个ID并缓存在本地的话,那样将大大提供业务应用获 ...
- 分布式ID(唯一性)的生成方法汇总
欢迎关注方志朋的博客,回复"666"获面试宝典 在软件研发工程中,经常会遇到系统主键的唯一性问题,尤其是在现如今比较火热的微服务架构中.分布式ID 具备唯一性.高可用性.有序增长等 ...
- 分布式 id 生成器
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 本文来源: www.juejin.im/post/5d8882d8 ...
- 美团(Leaf)分布式ID生成器,好用的一批!
不了解分布式ID的同学,先行去看<一口气说出 9种 分布式ID生成方式,面试官有点懵了>温习一下基础知识,这里就不再赘述了 美团(Leaf) Leaf是美团推出的一个分布式ID生成服务,名 ...
- 分布式id生成策略,我和面试官扯了一个半小时
面试官:小伙子,你还记得我吗?我是上次面试你的那个面试官. 我心想:我去,怎么会不记得,我又不是青年痴呆,上次害我画了那么多图,还使劲敲了一个多钟的电脑,满脑子都是你的阴影. 我:记得记得,您好,很高 ...
- 一口气说出 9种 分布式ID生成方式,面试官有点懵了
写在前边 前两天公众号有个粉丝给我留言吐槽最近面试:"四哥,年前我在公司受点委屈一冲动就裸辞了,然后现在疫情严重两个多月还没找到工作,接了几个视频面试也都没下文.好多面试官问完一个问题,紧接 ...
最新文章
- Git本地仓库与远程仓库关联
- Netty学习笔记(四)EventLoopGroup续篇
- 【HDU - 5988】Coding Contest(网络流费用流,改模板)
- C语言指针原来也可以这么的通俗易懂!
- 游戏中的“战争黑雾”和现实中的程序员处境
- TQuery组件的Open方法与ExecSQL的区别
- php连接mysql数据库失败_PHP远程连接MySQL数据库失败之原因
- android方法的初始化,Android小技巧:自动初始化Library
- 【转】android实现退出整个工程
- python pyqt eric_python+PyQT+Eric安裝配置 | 學步園
- 递归法:求两个串的最大公共子序列的长度
- c++如何生成指定范围的随机数
- 千古第一文人苏轼的众CP
- ios 渐变透明背景_2019 - 渐变梯度
- AI Illustrator 中钢笔工具在绘制过程中如何使用
- 知乎大V推荐!如何在面试中通过工厂模式来给自己加分?圆我大厂梦!
- bequeath_conn
- 软件测试管理工具——禅道(安装、讲解)
- Python爬虫与信息提取(五)爬虫实例:爬取新浪微博热搜排名
- 使用JDBC的基本步骤