没有合适的资源?快使用搜索试试~ 我知道了~
一种简单的ID生成策略: Mysql表生成全局唯一ID的实现
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
1 下载量 164 浏览量
2021-01-19
21:38:46
上传
评论
收藏 195KB PDF 举报
温馨提示
试读
8页
生成全局ID的方法很多, 这里记录下一种简单的方案: 利用mysql的自增id生成全局唯一ID. 1. 创建一张只需要两个字段的表: CREATE TABLE `guid` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `stub` char(1) NOT NULL DEFAULT '' COMMENT '桩字段,占坑的', PRIMARY KEY (`id`), UNIQUE KEY `uk_stub` (`stub`) -- 将 stub 设为唯一索引 ) ENGINE=MyISAM AUTO_INCREMENT=1000
资源推荐
资源详情
资源评论
一种简单的一种简单的ID生成策略生成策略: Mysql表生成全局唯一表生成全局唯一ID的实现的实现
生成全局ID的方法很多, 这里记录下一种简单的方案: 利用mysql的自增id生成全局唯一ID.
1. 创建一张只需要两个字段的表创建一张只需要两个字段的表:
CREATE TABLE `guid` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`stub` char(1) NOT NULL DEFAULT '' COMMENT '桩字段,占坑的',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_stub` (`stub`) -- 将 stub 设为唯一索引
) ENGINE=MyISAM AUTO_INCREMENT=1000000000 DEFAULT CHARSET=utf8;
指定自增起始: alter table guid auto_increment=1000000000, 这样可以保证ID为10位(涨到11位几乎不可能吧).
2. 定义定义 mybatis mapper:
@Mapper
public interface GuidMapper {
/**获取全局唯一ID
* @return
*/
// replace into afs_guid(stub) values('a');
// select last_insert_id();
@Insert("REPLACE INTO guid (stub) VALUES('a')")
@SelectKey(statement = {"SELECT LAST_INSERT_ID()"}, keyProperty = "guidHolder.id", before = false, resultType = long.class)
int getGuid( @Param("guidHolder") GuidHolder guidHolder);
@Data
public static class GuidHolder{
private long id;
private String stub;
}
3. 测试测试
GuidMapper.GuidHolder guidHolder = new GuidMapper.GuidHolder();
int i = guidMapper.getGuid(guidHolder);
long guid = guidHolder.getId();
// guid 就是返回的ID
尾巴尾巴
并发安全问题并发安全问题
REPLACE INTO 类似于 INSERT 是安全的. 不只是它会先判断主键或唯一键是否重复, 重复, 则删除原有的, 新增一条, 替换原来的.
SELECT LAST_INSERT_ID() 是和mysql连接绑定的, 当前连接上, 操作触发了auto_increment值改变, 得到新的数值, 这个数值, 只会被当
前连接可见. 其他连接也只会拿到它改变auto_increment后的值.
以上两点保证了 并发安全 .
另外, 即使手动将id的值改小了, 下次 replace into 后依然会从上次自增的基础上继续自增. 因为手动修改id的值, 不会改变auto_increment
的值.
补充知识:补充知识:集群高并发情况下如何保证分布式唯一全局集群高并发情况下如何保证分布式唯一全局Id生成生成
前言前言
系统唯一系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。
这篇文章就是给各位看官提供一个生成分布式唯一全局id生成方案的思路,希望能帮助到大家。
不足之处,请多多指教!!
问题问题
为什么需要分布式全局唯一ID以及分布式ID的业务需求
在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识,如在美团点评的金融、支付、餐饮、酒店
猫眼电影等产品的系统中数据逐渐增长,对数据库分库分表后需要有一个唯一ID来标识一条数据或信息;
特别Ian的订单、骑手、优惠券都需要有唯一ID做标识
此时一个能够生成全局唯一ID的系统是非常必要的
资源评论
weixin_38589168
- 粉丝: 7
- 资源: 970
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于UC3842+LTS26Q1565A设计PC机充电器 硬件(原理图+PCB)工程文件.zip
- Hive SQL经典面试题,大数据SQL经典面试题
- Qt实现喷码器代码,实现二维码、条形码、图形的旋转、移动等
- 基于LM324芯片比较器传感器模块AD09设计硬件(原理图+PCB)工程文件.zip
- HTTP请求 - 记一笔-添加记账.jmx
- 2205040245凡永超硬间隔svm.ipynb
- Qt喷码器demo,演示软件,不是代码
- 目标跟踪-基于目标中心点同时进行目标检测+目标跟踪算法实现-项目源码-优质项目实战.zip
- Python《文本特征分析-全唐诗数据挖掘及分析 》+源代码
- Netron-Setup-4.5.0
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功