1.UUID 的目的诈皿,是讓分布式系統(tǒng)中的所有元素瓦胎,都能有唯一的辨識資訊矾利,而不需要透過中央控制端來做辨識資訊的指定拷肌。如此一來,每個人都可以建立不與其它人沖突的 UUID简逮。
2.用到了以太網(wǎng)卡地址球散、納秒級時間、芯片ID碼和許多可能的數(shù)字
UUID由以下幾部分的組合:
(1)當前日期和時間散庶,UUID的第一個部分與時間有關(guān)蕉堰,如果你在生成一個UUID之后,過幾秒又生成一個UUID督赤,則第一個部分不同嘁灯,其余相同泻蚊。
(2)時鐘序列躲舌。
(3)全局唯一的IEEE機器識別號,如果有網(wǎng)卡性雄,從網(wǎng)卡MAC地址獲得没卸,沒有網(wǎng)卡以其他方式獲得。
UUID的唯一缺陷在于生成的結(jié)果串會比較長秒旋。
UUID 來作為數(shù)據(jù)庫數(shù)據(jù)表主鍵是非常不錯的選擇约计,保證每次生成的UUID 是唯一的。
a.生成 UUID
需要用到j(luò)ava 自帶 JDk;
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.生成指定數(shù)目的 UUID
/**
* 獲得指定數(shù)目的UUID
* @param number int 需要獲得的UUID數(shù)量
* @return String[] UUID數(shù)組
*/
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類型的主鍵有什么好處?
當數(shù)據(jù)量多细卧、登錄用戶量多尉桩、遇到高并發(fā)的時候,自增長不利于維護贪庙,也不利于拓展蜘犁,而且也有可能出現(xiàn)幾個人同時插入自增長的同一個id 比如自增長到了100,ABC三個用戶同時插入的時候會不會出現(xiàn)同時插入101止邮?或者覆蓋101數(shù)據(jù)呢这橙?這就是弊端。
為啥用uuid而不用自增長方式呢导披?
首先為什么要用uuid控制主鍵呢屈扎?
相比較自動增長的int類型的主鍵有什么好處?
當數(shù)據(jù)量多撩匕、登錄用戶量多鹰晨、遇到高并發(fā)的時候,自增長不利于維護,也不利于拓展并村,而且也有可能出現(xiàn)幾個人同時插入自增長的同一個id 比如自增長到了100巍实,ABC三個用戶同時插入的時候會不會出現(xiàn)同時插入101?或者覆蓋101數(shù)據(jù)呢哩牍?這就是弊端棚潦。
uuid是string,不是int數(shù)值
uuid是string膝昆,不是int數(shù)值丸边,
uuid是string,不是int數(shù)值荚孵,
uuid是string妹窖,不是int數(shù)值,
uuid = uuid.replace("-", ""); //因為UUID本身為32位只是生成時多了“-”收叶,所以將它們?nèi)c就可
uuid = uuid.replace("-", ""); //因為UUID本身為32位只是生成時多了“-”骄呼,所以將它們?nèi)c就可
uuid = uuid.replace("-", ""); //因為UUID本身為32位只是生成時多了“-”,所以將它們?nèi)c就可
輸出結(jié)果:
1 fd61384b-05a5-4030-885e-a6bd3b60ef1a
下面是去除UUID中的"-"
輸出結(jié)果:
1 fd61384b-05a5-4030-885e-a6bd3b60ef1a
下面是去除UUID中的"-"
輸出結(jié)果:
1 fd61384b-05a5-4030-885e-a6bd3b60ef1a