最近新公司新搞項目
需要定一個不重複的id生成策略。
以前mysql 自增策略第一個就被PASS了
查閱了相關資料。
大概有的策略如下
第一個就是UUID
這個大家都比較熟悉了
結合機器的網卡、當地時間、一個隨記數來生成UUID
優點:本地生成,性能較好
缺點:長度過長,而且還是無序的
第二個就是基於數據庫生成
單獨搞一臺數據庫,
設置自動增長,用於記錄增長值
然後所有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
還有沒有其他策略比較好用,
可以留言下,
大家一起進步
閱讀更多 程序員一代碼搬運工 的文章