程序员一代码搬运工
【Java学习心得和Java学习技术个人总结】

不重复的id生成策略

最近新公司新搞项目

需要定一个不重复的id生成策略。

以前mysql 自增策略第一个就被PASS了

查阅了相关资料。

大概有的策略如下

第一个就是UUID

这个大家都比较熟悉了

结合机器的网卡、当地时间、一个随记数来生成UUID

不重复的id生成策略

优点:本地生成,性能较好

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

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

单独搞一台数据库,

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

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

优点:简单,高效

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

第三个 Twitter的snowflake算法

这个没有去深入了解

只是大概知道

snowflake是Twitter开源的分布式ID生成算法,

结果是一个long型的ID。

其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0

优点:生成的id是long,递增

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

第四个 zookeeper生成id

第五个 MongoDB的ObjectId生成id

这两个了解比较少没有深入

直接pass过

第六个 redis生成id

redis现在基本的项目都会用到

很好用的缓存

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

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

缺点:网上有说引入redis配置啥的麻烦,代码量多之类的,我感觉springboot,咔咔咔,2,3下就搞定了

所以后面就选用redis生成id


还有没有其他策略比较好用,

可以留言下,

大家一起进步

未经允许不得转载:程序员一代码搬运工 » 不重复的id生成策略

分享到:更多 ()