常见的几种解决方法
- UUID
- 使用数据库中设置整形字段auto_increment
- 使用雪花算法
UUID的优缺点
优点:简单,方便生成。
缺点:毫无意义,这个字段仅能保证唯一性,不重复,但是没有实际意义
auto_crement
这个比较简单,设计表的时候,就设置自增长。
缺点:就是采用分布式布局,进行集群,那么不同服务器
雪花算法的理论
雪花算法是生成64位的数字。
最高位是符号位,对于我们来说没有什么实际意义。这位就是0,表示是正数
接着41位是一个时间戳。2^41,2的41次方,可以使用69年,这已经远超一个软件的生命周期了,(我去腾讯学习的时候,说过一般软件的生命周期很短,像QQ这种超长生命周期的产品不多见)
接着10位是工作机器ID,2^10次方,可以有1024个数字,表示可以有1024个机器做集群,这个数字对于我来说很夸张了
最后12位表示序列号,2^12,表示4096,这个是序列号,一毫秒生成4096个序列号,那么一秒钟就会生成4096000,这已经可以保证不重复了吧。
优点就是适用于分布式数据库生成全局ID。缺点就是依赖机器的当前时间。如果机器出现时间回滚,就是回到某个过去的时间,可能会造成ID重复。
雪花算法某些问题
雪花算法在Java对应是long类型,前端接收变成了number类型。会出现精度不匹配的问题,这样就在前后端交互的controller层将long类型变成String类型