自增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長度。擴大序列號和時間戳。