java uuid

1.UUID 的目的,是讓分佈式系統中的全部元素,都能有惟一的辨識資訊,而不須要透過中央控制端來作辨識資訊的指定。如此一來,每一個人均可以創建不與其它人衝突的 UUID。java

2.用到了以太網卡地址、納秒級時間、芯片ID碼和許多可能的數字數據庫

UUID由如下幾部分的組合:
(1)當前日期和時間,UUID的第一個部分與時間有關,若是你在生成一個UUID以後,過幾秒又生成一個UUID,則第一個部分不一樣,其他相同。
(2)時鐘序列。
(3)全局惟一的IEEE機器識別號,若是有網卡,從網卡MAC地址得到,沒有網卡以其餘方式得到。數組

UUID的惟一缺陷在於生成的結果串會比較長。bash

UUID 來做爲數據庫數據表主鍵是很是不錯的選擇,保證每次生成的UUID 是惟一的。併發

a.生成 UUID
須要用到java 自帶 JDk;dom

import java.util.UUID;
public static void main(String[] args) {
for(int i=0;i<10;i++){
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
System.out.println(uuid);
}
}

複製代碼

b.生成指定數目的 UUID分佈式

/** 
* 得到指定數目的UUID 
* @param number int 須要得到的UUID數量 
* @return String[] UUID數組 
*/ 
public static String[] getUUID(int number){ 
if(number < 1){ 
return null; 
} 
String[] retArray = new String[number]; 
for(int i=0;i<number;i++){ 
retArray[i] = getUUID(); 
} 
return retArray; 
}

/** 
* 得到一個UUID 
* @return String UUID 
*/ 
public static String getUUID(){ 
String uuid = UUID.randomUUID().toString(); 
//去掉「-」符號 
return uuid.replaceAll("-", "");
}
複製代碼

爲啥用uuid而不用自增加方式呢?高併發

首先爲何要用uuid控制主鍵呢?學習

相比較自動增加的int類型的主鍵有什麼好處?ui

當數據量多、登陸用戶量多、遇到高併發的時候,自增加不利於維護,也不利於拓展,並且也有可能出現幾我的同時插入自增加的同一個id 好比自增加到了100,ABC三個用戶同時插入的時候會不會出現同時插入101?或者覆蓋101數據呢?這就是弊端。

爲啥用uuid而不用自增加方式呢?

首先爲何要用uuid控制主鍵呢?

相比較自動增加的int類型的主鍵有什麼好處?

當數據量多、登陸用戶量多、遇到高併發的時候,自增加不利於維護,也不利於拓展,並且也有可能出現幾我的同時插入自增加的同一個id 好比自增加到了100,ABC三個用戶同時插入的時候會不會出現同時插入101?或者覆蓋101數據呢?這就是弊端。

uuid是string,不是int數值

uuid是string,不是int數值,

uuid是string,不是int數值,

uuid是string,不是int數值,

 

uuid = uuid.replace("-", "");               //由於UUID自己爲32位只是生成時多了「-」,因此將它們去點就可  

 

uuid = uuid.replace("-", "");               //由於UUID自己爲32位只是生成時多了「-」,因此將它們去點就可  

 

uuid = uuid.replace("-", "");               //由於UUID自己爲32位只是生成時多了「-」,因此將它們去點就可  
複製代碼

輸出結果:

1 fd61384b-05a5-4030-885e-a6bd3b60ef1a
複製代碼

下面是去除UUID中的"-"

輸出結果:

1 fd61384b-05a5-4030-885e-a6bd3b60ef1a
複製代碼

下面是去除UUID中的"-"

輸出結果:

1 fd61384b-05a5-4030-885e-a6bd3b60ef1a
複製代碼

歡迎加入學習交流羣569772982,你們一塊兒學習交流。

相關文章
相關標籤/搜索