分佈式 id 的四種寫法,你會嗎?

引言

咱們在生活中,id 與咱們的生活其實是如影隨行的。java

身份證號,QQ 號,手機號,銀行卡號,學生時代的學號,甚至是躺在你硬盤裏的番號。git

這些 id 標識是如此的重要,乃至每個後臺程序員都要去思考這個問題—— id 的有幾種寫法?都有哪些利弊?程序員

本文就帶你深刻淺出學習幾種常見的 id 的生成策略。github

入門學習

因爲篇幅優先,建議閱讀下面的文章內容。redis

分佈式 id 生成需求算法

uuid 策略講解數據庫

random 生成策略api

snowflake 算法講解併發

開源工具

id 是一款爲 java 設計常見 ID 實現策略。dom

讓你在平常開發中能夠開箱即用,享受提早下班的快樂~

創做意圖

對於 id 生成,基本是全部後臺系統必須面對的問題,分佈式 id 的生成也是很常見的一個需求。

最近同事寫的代碼,在多臺機器高併發下產生了序列號衝突。

以爲 id 策略應該聚合成一個工具包,而不是每次重複造輪子,有時候還有問題。

特性

  • 極簡 api,一行代碼搞定一切

  • 內置多種 id 生成策略,總有一款適合你

  • jar 包只有 13k

快速開始

maven 引入

<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 返回

Road-Map

  • [ ] snowflake 定製化+代碼優化

  • [ ] 引入 comb 算法

  • [ ] 其餘開源 id 的兼容

  • [ ] 基於常見數據庫的 id 生成

  • [ ] 基於 redis 的 id 生成
相關文章
相關標籤/搜索