91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java如何生成唯一字符串ID

發布時間:2020-10-29 16:31:15 來源:億速云 閱讀:422 作者:Leah 欄目:開發技術

java如何生成唯一字符串ID?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

public static synchronized String gen() {
 StringBuilder builder = new StringBuilder(System.nanoTime() / 1000 + "");
 if (SEQ.incrementAndGet() % 10 == 0) {
  SEQ.incrementAndGet();
 }
 builder.append(FORMAT.format(SEQ.get()));
 if ((MAX_PAD_SIZE - 1) == SEQ.get()) {
  SEQ.set(1);
 }
 long v = Long.parseLong(builder.reverse().toString());
 return Base62.encode(v);
}

這里用千分之一納秒做基數(經測試,基數在10w分之一納秒內都是安全的),再加上1~99的順序號來生成唯一ID。最終可以保證在大于10納秒(近似)的時間區間內不會產生重復值。

為了縮減長度,對字符串做了 Base62處理。在處理前又將納秒數值做了一次翻轉處理。不難想象,如果直接使用原始值來做Base62處理,因為時鐘的特征,最終生成的值的前幾位都是相同的。

來看一下這個程序生成的ID:

aSPog4cC
d4t1xZdt
g2tkZVqv
jrinwXx5
m8ZIAKVr
oUB5nzS5
rZa1gPAl
uD12VZ3A
8dnItkTj

八位的長度,唯一且整齊。下面是一個單元測試:

@Test
public void gen() {
 int size = 10240;
 Set<String> set = new HashSet<>();
 for (int i = 0; i < size; i++) {
  String code = ShortCode.gen();
  //System.out.println(code);
  set.add(code);
 }
 Assert.assertEquals(size, set.size());
}

這里只對10240的規模做了測試。因為唯一ID是基于時鐘生成的,所以測試時整體規模的大小不影響ID的唯一性(和短鏈接方案不一樣)。但是太小了也不行——順序號會發揮作用。10240算是一個中庸的值,足夠暴露問題,也不會有太多的冗余。

仍然需要強調一下:這個方案只能保證在(當前)單機上的唯一性,如果是集群范圍內建議采用其他方案,或者加上一兩位機器ID。

關于java如何生成唯一字符串ID問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲沃县| 婺源县| 宕昌县| 江川县| 澄江县| 桑植县| 介休市| 阿坝县| 勃利县| 改则县| 太湖县| 仙桃市| 青铜峡市| 信阳市| 马关县| 克什克腾旗| 自治县| 丹阳市| 东至县| 黔南| 普兰店市| 东台市| 依兰县| 平泉县| 昌图县| 综艺| 怀安县| 罗甸县| 南汇区| 宁夏| 清丰县| 泰和县| 长子县| 施秉县| 东辽县| 呼图壁县| 理塘县| 舒兰市| 河北省| 乐安县| 治县。|