自增ID算法
不错,能够限度抑制ID的大小。但须要有一个中心化的节点做为解决原子性问题。能够选用Redis,MySQL,Zookeeper。成本有点高。数据结构
UUID分布式
分布式,并且惟一!缺点是生产的ID太长。atom
Twitter的SnowFlake算法spa
该算法能够生产分布式的自增ID。切生产的ID只有8字节,64位。其数据结构以下:code
1位
,不用。二进制中最高位为1的都是负数,可是咱们生成的id通常都使用整数,因此这个最高位固定是041位
,用来记录时间戳(毫秒)。部署
10位
,用来记录工做机器id。it
5位datacenterId
和5位workerId
5位(bit)
能够表示的最大正整数是25−1=31,便可以用0、一、二、三、....31这32个数字,来表示不一样的datecenterId或workerId12位
,序列号,用来记录同毫秒内产生的不一样id。class
12位(bit)
能够表示的最大正整数是212−1=4095,便可以用0、一、二、三、....4094这4095个数字,来表示同一机器同一时间截(毫秒)内产生的4095个ID序号因为在Java中64bit的整数是long类型,因此在Java中SnowFlake算法生成的id就是long来存储的。date
该算法生产的Id是在每台机器上都是按时间戳自增的。
能够根据实际需求变更该算法:好比能够工做机器Id长度。扩大序列号和时间戳。