Java 唯一ID生成器

2021-08-15 10:38:29 字數 913 閱讀 2391

前段時間,寫了乙個id 生成器,發在群裡,結果遭到別人嘲笑,心有不甘,於是思來想去,決定在重新寫乙個id生成器。此方法生成的id理論上也是會有重複,但是這個概率太低太低,低到可以忽略不計。

使用當前時間戳+指定長度的隨機數,並隨機打亂字串。可以生成指定長度的純數字的id。

/**

* 普通

id生成器

,用時間戳生成

+指定位隨機數生成,

* 此方法用於單機應用並且併發量不高的情況之下**

@return

*/public static string getid()

//隨機打亂

collections.shuffle(list);

//拼接字串,並新增

2(自定義

)位隨機數

return string.join(""

, list) + randomnumber(2);

}/**

* 生成指定長度的乙個數字字串**

@param

num*

@return

*/public static string randomnumber(int num)

random random = new random();

stringbuilder str = new stringbuilder();

for (int i = 0

; i < num; i++)

return str.tostring();

}

唯一ID生成器snowflake

sn fle k 很多場景需要使用全域性唯一id,用來標識唯一一條訊息,唯一一筆交易,唯一乙個使用者,唯一一張等等。傳統資料庫表的自增主鍵是很簡單的一種實現方式,前提是你沒有分庫,也沒有分表,如果你分表了,id就會重複,失去唯一性 用時間做唯一id,這個在併發比較高或者分布式環境中基本不可行,統一時...

IdGenerator 唯一Id生成器

public class idgenerator public idgenerator long processid this.processid processid protected long timegen public synchronized long nextid 剛剛生成的時間戳跟上次...

分布式唯一ID生成器

在應用程式中,經常需要全域性唯一的id作為資料庫主鍵。如何生成全域性唯一id?首先,需要確定全域性唯一id是整型還是字串?如果是字串,那麼現有的uuid就完全滿足需求,不需要額外的工作。缺點是字串作為id占用空間大,索引效率比整型低。如果採用整型作為id,那麼首先排除掉32位int型別,因為範圍太小...