前段時間,寫了乙個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型別,因為範圍太小...