今天说一下分布式id的解决方案
常见的分布式id解决方案:1,基于数据库自增 2,基于redis的自增 3,基于Long类型的64位的雪花算法(这里不考虑uuid的方案)
先说一下数据库自增,
如果你是一个单点数据库来做,那么很简单,就是直接取自增id就行,这个数据库也可以额外做一个备份数据库。
如果是多个数据库的话,就要设置其实自增点,和每次自增的步长,但这有一个不好的地方是,不好扩展,例如加节点数据库的时候不好做。
基于数据库自增来做还有一种思路是:通过号段来取,就是每次取一段数据,而不是一个一个的取,这样可以提高性能。这个时候表里要记录下当前最大的id是多少,然后当前的段长是多少、
滴滴的tinyid就是基于数据库自增来做的。
redis自增就是主要依赖于redis之中的increment方法
雪花算法:
原理就是将64位的Long类型数据,第一位为0,是正数,然后42位存时间到毫秒,后面几号拿出来存机器号,最后几位用来存没毫秒生产的序列号。
美团的leaf和百度的uidgenerator 用的就是这个