1、概述:python
UUID(Universally Unique Identity)的縮寫,是一種軟件建構的標準,一般由32字節16進制數表示(128位),它能夠保證時間和空間的惟一性。目前應用最普遍的UUID事微軟的GUIDs。算法
2、做用:數據庫
UUID讓分佈式系統全部元素都有惟一的辨識信息,讓每一個人均可以創建與他人不一樣的UUID,不需考慮數據庫創建時的名稱重複問題。隨機生成字符串,當成token、用戶帳號、訂單等。安全
3、原理:分佈式
UUID是指一臺機器上生成的數字,他保證同一時空全部機器都是惟一的。函數
UUID由如下幾部分構成:ui
(1)時間戳:根據當前時間或者時鐘序列生成字符串spa
(2)全劇惟一的機器識別號,根據網卡MAC地址或者IP獲取,若是沒有網卡則以其餘方式獲取。blog
(3)隨機數:機器自動隨機一組序列token
等等
4、算法
uuid有5種生成算法,分別是uuid1()、uuid2()、uuid3()、uuid4()、uuid5()。
一、uuid1()基於時間戳
由MAC地址、當前時間戳、隨機數字。保證全球範圍內的惟一性。可是因爲MAC地址使用會帶來安全問題,局域網內使用IP代替MAC
二、uuid2() 基於分佈式環境DCE
算法和uuid1相同,不一樣的是把時間戳前四位換成POIX的UID,實際不多使用。注意:python中沒有這個函數
三、uuid3() 基於名字和MD5散列值
經過計算名字和命名空間的MD5散列值獲得的,保證了同一命名空間中不一樣名字的惟一性,不一樣命名空間的惟一性。可是同一命名空間相同名字生成相同的uuid。
四、uuid4() 基於隨機數
由僞隨機數獲得的,有必定重複機率,這個機率是能夠算出來的
五、uuid5() 基於名字和SAHI值
算法和uuid3相同,不一樣的是使用SAHI算法
5、使用經驗:
一、python中沒有DCE,因此uuid2能夠忽略
二、uuid4存在機率重複性,因爲無映射性,最好不使用
三、若是全局的分佈式環境下,最好使用uuid1
四、若名字的惟一性要求,最好使用uuid3或者uuid5
6、使用: