咱們在生活中,id 與咱們的生活其實是如影隨行的。java
身份證號,QQ 號,手機號,銀行卡號,學生時代的學號,甚至是躺在你硬盤裏的番號。git
這些 id 標識是如此的重要,乃至每個後臺程序員都要去思考這個問題—— id 的有幾種寫法?都有哪些利弊?程序員
本文就帶你深刻淺出學習幾種常見的 id 的生成策略。github
因爲篇幅優先,建議閱讀下面的文章內容。redis
uuid 策略講解數據庫
random 生成策略api
id 是一款爲 java 設計常見 ID 實現策略。dom
讓你在平常開發中能夠開箱即用,享受提早下班的快樂~
對於 id 生成,基本是全部後臺系統必須面對的問題,分佈式 id 的生成也是很常見的一個需求。
最近同事寫的代碼,在多臺機器高併發下產生了序列號衝突。
以爲 id 策略應該聚合成一個工具包,而不是每次重複造輪子,有時候還有問題。
極簡 api,一行代碼搞定一切
內置多種 id 生成策略,總有一款適合你
<dependency> <groupId>com.github.houbb</groupId> <artifactId>id</artifactId> <version>0.0.2</version> </dependency>
final String snowflake = IdHelper.snowflake(); System.out.println(snowflake);
1260199310461505537
全部的 id 均可以經過 IdHelper
直接調用。
序號 | 方法 | 例子 |
---|---|---|
1 | uuid8() | dUlmJiEq |
2 | uuid32() | 3f9afd5773d143fb8e28d80de47f3d1a |
3 | random() | 202005122127270743937635635 |
4 | random(prefix, length) | random("999", 5) 爲 9992020051221340961522263 |
5 | snowflake() | 1260199914969849858 |
6 | local() | 從 0 開始,逐漸加 1 的 id 返回 |
[ ] snowflake 定製化+代碼優化
[ ] 引入 comb 算法
[ ] 其餘開源 id 的兼容
[ ] 基於常見數據庫的 id 生成