不重複的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


還有沒有其他策略比較好用,

可以留言下,

大家一起進步


分享到:


相關文章: