如何实现ID生成不重复?

如何实现不重复的id生成呢?

这里还是要推荐下小编的web前端学习q u n:6879+584+61,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份最新的web前端资料和0基础入门教程,欢迎初学和进阶中的小伙伴。在不忙的时间我会给大家解惑。

以下就是小编为大家整理的方案:

第一个就是UUID

UUID 是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字

UUID由以下几部分的组合:

(1)41位的时间序列(精确到毫秒,41位的长度可以使用69年)

(2)10位的机器标识(10位的长度最多支持部署1024个节点)

(3)12位的计数顺序号(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号) 最高位是符号位,始终为0。

优点:本地生成,数据库压力减轻了

缺点:长度过长,而且还是无序的

第二个就是基于数据库生成

单独搞一台数据库,

设置自动增长,用于记录增长值

然后所有id生成都去请求它

优点:简单,高效

缺点:需要单独部署,大并发下性能比较低

第三个 Twitter的snowflake算法

snowflake的结构如下(每部分用-分开):

0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000

第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)

一共加起来刚好64位,为一个Long型。(转换成字符串后长度最多19)

snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。经测试snowflake每秒能够产生26万个ID。

优点:生成的id是Long类型,递增

缺点:每台机器上的时间不一样,会产生不了递增的情况

第四个 redis生成id

redis是很好用的缓存。

Redis是单线程的,所以也可以用生成全局唯一的ID。

优点:数字ID天然排序,对分页或者需要排序的结果很有帮助,高并发也行,可以设置Redis集群来生成。

缺点:redis配置有些麻烦,代码量多。

如果大家有更好的方式方法,欢迎大家留言评论,一起进步。

猜你喜欢

转载自blog.csdn.net/weixin_43992840/article/details/84874531