如何優雅的使用雪花演算法生成分布式唯一ID

2021-10-04 20:37:56 字數 2907 閱讀 2693

分布式唯一id生成方式有很多,如大名鼎鼎的雪花演算法、使用uuid生成、redis自增、zookeeper生成、資料庫自增主鍵生成等等。

如果你使用的orm框架是mybatis plus,且版本在3.3.0及以上,它提供了一種優雅的id生成方式。

注:詳情可參考mybatis plus官網。

如果你使用的是mybatis,強烈建議切換到mybatis plus。注:mybatis plus特性。

環境:springboot + mysql + mybatisplus

>

>

com.baomidougroupid

>

>

mybatis-plus-boot-starterartifactid

>

>

3.3.0version

>

dependency

>

mybatis-plus:-

classpath

global-config

:db-config

:id-type

: assign_id #自3.3.0開始,預設使用雪花演算法+uuid

table-underline

:true

banner

:false

configuration

:log-impl

: org.apache.ibatis.logging.stdout.stdoutimpl #列印sql便於除錯

這裡的重點是id-type: assign_id

@override

public

void

add(article article)

如果使用的是nosql,如mongodb,那麼該如何使用呢?

/*

這裡無需載入整個mybatis plus,因為只用到了id生成器。

mybatis plus的mybatisplusautoconfiguration類註解上有乙個@autoconfigureafter註解:@autoconfigureafter()

因此,不載入 datasourceautoconfiguration,就不會載入mybatisplusautoconfiguration了。

*/(exclude =

)public

class

/** * 利用mybatis plus的主鍵id生成器生成全域性唯一id

* @return

*/@bean

public idworker idworker()

}

@autowired

private idworker idworker;

public

void

add(spit spit)

mybatis plus中雪花演算法的實現主要在idworker類中。

public

class

idworker

/** * 獲取唯一id

** @return id

*/public

static

long

getid

(object entity)

/** * 獲取唯一id

** @return id

*/public

static string getidstr()

/** * 獲取唯一id

** @return id

*/public

static string getidstr

(object entity)

/** * 格式化的毫秒時間

*/public

static string getmillisecond()

/** * 時間 id = time + id

* 例如:可用於商品訂單 id

*/public

static string gettimeid()

/** * 有參構造器

** @param workerid 工作機器 id

* @param datacenterid 序列號

* @see #setidentifiergenerator(identifiergenerator)

*/public

static

void

initsequence

(long workerid,

long datacenterid)

/** * 自定義id 生成方式

** @param identifiergenerator id 生成器

* @see globalconfig#setidentifiergenerator(identifiergenerator)

*/public

static

void

setidentifiergenerator

(identifiergenerator identifiergenerator)

/** * 使用threadlocalrandom獲取uuid獲取更優的效果 去掉"-"

*/public

static string get32uuid()

}

示例**如下:

雪花演算法生成分布式ID

package top.sponger.common.util import lombok.data 描述 twitter的分布式自增id雪花演算法snowflake public class snowflake if machineid max machine num machineid 0 th...

SnowFlake雪花演算法生成分布式id

author twitter 雪花演算法snowflake created on 2019 3 14.author twitter public class idsnowflake 起始的時間戳 private final static long start stmp 1480166465631l ...

工具類 雪花演算法生成分布式ID

工具類 雪花演算法生成分布式id snowflake 演算法,是 twitter 開源的分布式 id 生成演算法。其核心思想就是 使用乙個 64 bit 的 long 型的數字作為全域性唯一 id。在分布式系統中的應用十分廣泛,且id 引入了時間戳,基本上保持自增的,後面的 中有詳細的註解。這 64...