1.UUID 的目的,是讓分佈式系統中的全部元素,都能有惟一的辨識資訊,而不須要透過中央控制端來作辨識資訊的指定。如此一來,每一個人均可以創建不與其它人衝突的 UUID。java
2.用到了以太網卡地址、納秒級時間、芯片ID碼和許多可能的數字數據庫
UUID由如下幾部分的組合:
(1)當前日期和時間,UUID的第一個部分與時間有關,若是你在生成一個UUID以後,過幾秒又生成一個UUID,則第一個部分不一樣,其他相同。
(2)時鐘序列。
(3)全局惟一的IEEE機器識別號,若是有網卡,從網卡MAC地址得到,沒有網卡以其餘方式得到。數組
UUID的惟一缺陷在於生成的結果串會比較長。併發
UUID 來做爲數據庫數據表主鍵是很是不錯的選擇,保證每次生成的UUID 是惟一的。dom
a.生成 UUID
須要用到java 自帶 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.生成指定數目的 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而不用自增加方式呢?ui
首先爲何要用uuid控制主鍵呢?spa
相比較自動增加的int類型的主鍵有什麼好處?code
當數據量多、登陸用戶量多、遇到高併發的時候,自增加不利於維護,也不利於拓展,並且也有可能出現幾我的同時插入自增加的同一個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
下面是去除UUID中的"-"