插件推荐-twitter分布式主键id生成器与SID

插件推荐-twitter分布式主键id生成器与SID

推荐一个插件,那就是idworker,用了一年了,还是挺好用,先来说说干嘛的吧,鉴于现在主键的生成模式先来探讨一下

1、id自增:比较普遍,但是在数据备份恢复的时候,容易出错,只适用于小数据量的表,或者小型后台管理系统

2、uuid:uuid可以保证不重复,但是不建议使用,理由是实在太长了,一窜字符串不人性化,uuid适合token,据我所知,我一朋友的公司的部分项目的所有id都是使用的uuid,鉴于是个大型erp,也就无所谓了...

3、时间戳+随机数字:比较简单的做法,可以这么做,但是不建议大型系统使用

4、使用redis自增,这样就需要搭建单独的一个id服务器,每次id使用后就要+1,由于redis是单线程的,适用于这样的模式,当然了,阿里的redis不能用,理由是阿里redis是多线程的,自己重新开发过的了,使用redis还有个场景是用来做秒杀,这个是后话了,以后再聊

5、分布式idwoker,这个是twiter自己开发维护的一个id生成器,非常好用,可以分布式部署,也能直接使用,非常方便,可以说基本上不会发生id重复的情况,而id看似也很人性化

这是正在使用的订单表id,可以看出,id为16位,外加10位sid,sid是simple idworker的简写

插件推荐-twitter分布式主键id生成器与SID

这是腾讯天天快报的主键,可以看到也是同样的做法,由此可证,非常实用

插件推荐-twitter分布式主键id生成器与SID

看看用法:

首先你要在spring配置文件中声明,这样表示他是个单例,idworker要在单例下使用,不然id会重复

插件推荐-twitter分布式主键id生成器与SID

然后注入

插件推荐-twitter分布式主键id生成器与SID

最后直接nextShort就可以使用

插件推荐-twitter分布式主键id生成器与SID

相关代码如下,有兴趣可以看看,一个是server端,一个是client端

https://github.com/leechenxiang/idworker

https://github.com/leechenxiang/idworker-client


分享到:


相關文章: