分布式ID解决⽅案

资料参考来源拉钩Java高薪训练营


一、UUID

UUID是通用唯一识别码,产生重复的UUID情况非常低。
java中生成一个UUID很简单,使用java.util包提供的方法:

java.util.UUID.randomUUID()

在这里插入图片描述

二、独立数据库的自增ID

假如A表分表为A1和A2表,那么可以在数据库中新建一张表global_id_generator,这张表设置id自增,往A1或A2中新增数据时,先向global_id_generator表新增一条数据,mysql中我们可以通过select last_insert_id()获取刚刚新增的这条数据的id,这样就可以拿到一个全局唯一id了。

那么其实这种⽅式现在基本不⽤,因为过于麻烦

三、SnowFlake 雪花算法

雪花算法其实就是生成一个long型的id,java中long型占8个字节64bit:
在这里插入图片描述
有些公司针对雪花算法封装了一些框架,⽐如滴滴的tinyid(基于数据库实现)、百度的uidgenerator(基于SnowFlake)和美团的leaf(基于数据库和SnowFlake)等。

四、Redis的Incr命令获取全局唯⼀ID

Redis Incr 命令将 key 中储存的数字值增⼀。如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执⾏ INCR 操作。

推荐使用这个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值