日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java id生成器 分布式_分布式高效唯一ID生成器(sequence)

發(fā)布時間:2025/3/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java id生成器 分布式_分布式高效唯一ID生成器(sequence) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

分布式高效唯一ID生成器(sequence)

簡介

高效GUID產(chǎn)生算法(sequence),基于Snowflake實現(xiàn)64位自增ID算法。

Twitter-Snowflake算法產(chǎn)生的背景相當(dāng)簡單,為了滿足Twitter每秒上萬條消息的請求,每條消息都必須分配一條唯一的id,這些id還需要一些大致的順序(方便客戶端排序),并且在分布式系統(tǒng)中不同機器產(chǎn)生的id必須不同。

性能測試數(shù)據(jù):

Snowflake算法核心

把時間戳,工作機器id,序列號組合在一起。

除了最高位bit標(biāo)記為不可用以外,其余三組bit占位均可浮動,看具體的業(yè)務(wù)需求而定。默認(rèn)情況下41bit的時間戳可以支持該算法使用到2082年,10bit的工作機器id可以支持1023臺機器,序列號支持1毫秒產(chǎn)生4095個自增序列id。下文會具體分析。

Snowflake – 時間戳

這里時間戳的細(xì)度是毫秒級,具體代碼如下,建議使用64位linux系統(tǒng)機器,因為有vdso,gettimeofday()在用戶態(tài)就可以完成操作,減少了進入內(nèi)核態(tài)的損耗。

Snowflake – 工作機器id

嚴(yán)格意義上來說這個bit段的使用可以是進程級,機器級的話你可以使用MAC地址來唯一標(biāo)示工作機器,工作進程級可以使用IP+Path來區(qū)分工作進程。如果工作機器比較少,可以使用配置文件來設(shè)置這個id是一個不錯的選擇,如果機器過多配置文件的維護是一個災(zāi)難性的事情。

Snowflake – 序列號

序列號就是一系列的自增id(多線程建議使用atomic),為了處理在同一毫秒內(nèi)需要給多條消息分配id,若同一毫秒把序列號用完了,則“等待至下一毫秒”。

獲取

cn.izern

sequence

${version}

使用

import cn.izern.sequence.Sequence;

Sequence sequence = new Sequence();

sequence.nextId();

線程安全,生成唯一序列ID

hibernate/jpa 使用Sequence作為ID生成方式

private Long id;

// other

@Id

@GeneratedValue(generator = "idGenerator")

@GenericGenerator(name = "idGenerator", strategy = "cn.izern.hibernate.id.IDSequenceGenerator")

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

總結(jié)

以上是生活随笔為你收集整理的java id生成器 分布式_分布式高效唯一ID生成器(sequence)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。