目录
一、前言
前段时间线上系统出现一个严重的bug:一个表中插入两条一样的id记录信息(该字段未设置唯一主键)。查看了代码,第一印象是绝对不可能出现该Bug,不科学,怎么会出现两个相同的id记录呢?
带着疑惑又仔细查看了代码,id的生成是SnowFlake雪花算法。大脑灵光一闪,这不就是分布式高并发下,SnowFlake雪花算法会出现重复id的问题。问题发现了,接下来就是“分布式高并发下,如何生成唯一id”的问题。带着这个问题,网上查询到,生成唯一uuid方法有:
UUID
Java自带的生成一串唯一随机36位字符串(32个字符串+4个“-”)的算法。它可以保证唯一性,但是其业务可读性差,无法有序递增。【缺点:不支持分布式】
SnowFlake
雪花算法,它是Twitter开源的由64位整数组成分布式ID,性能较高,并且在单机上递增。【缺点:不支持分布式】
UidGenerator
UidGenerator是百度开源的分布式ID生成器,其基于雪花算法实现。 【缺点:导jar包、创建表、导入配置等&