UUID

一:什麼是UUID?前端

  UUID是128位全局惟一標識符(univeral unique identifier),一般用32位的一個字符串形式來表現。Python中自帶UUID模塊來進行UUID的生成和實現。node

  經過MAC地址、時間戳、命名空間、隨機數、僞隨機數來保證生成的id的惟一性,有着固定的大小(128bit位)。一般有32字節的字符串(十六進制)表示python

  它的惟一性和一致性特色,使得能夠無需註冊過程就能產生一個新的UUID,UUID能夠被用做多種用途,既能夠用力啊短期內標記一個對象,也能夠可靠的辨別網絡中的持久性對象。算法

二:UUID的做用數據庫

  不少應用場景須要一個id,可是又不要求這個id 有具體的意義,僅僅用來標識一個對象。常見的用處有數據庫表的id字段;用戶session的key值;前端的各類UI庫,由於它們一般須要動態建立各類UI元素,這些元素須要惟一的id, 這時候就須要使用UUID了。例如:一個網站在存儲視頻、圖片等格式的文件時,這些文件的命名方式就能夠採用 UUID生成的隨機標識符,避免重名的出現。網絡

三:UUID的使用session

UUID主要有五個算法,也就是五種方法來實現。分佈式

python的uuid模塊提供的UUID類和函數uuid1(),uuid3(),uuid4(),uuid5() 來生成1, 3, 4, 5各個版本的UUID ( 須要注意的是:python中沒有uuid2()這個函數)。ide

  • uuid.uuid1(node clock_seq)
#   基於時間戳
#   使用主機ID, 序列號, 和當前時間來生成UUID, 可保證全球範圍的惟一性.
#   但因爲使用該方法生成的UUID中包含有主機的網絡地址, 所以可能危及隱私.
#   該函數有兩個參數, 若是 node 參數未指定, 系統將會自動調用 getnode() 函數來獲取主機的硬件(mac)地址.
#   若是 clock_seq  參數未指定系統會使用一個隨機產生的14位序列號來代替.
import uuid
print(uuid.uuid1())
  • uuid.uuid3(namespace, name)
#   經過計算名字和命名空間的MD5散列值獲得,保證了同一命名空間中不一樣名字的惟一性,
#   和不一樣命名空間的惟一性,***但同一命名空間的同一名字生成相同的uuid****。
print(uuid.uuid3(uuid.NAMESPACE_URL,'python'))
print(uuid.uuid3(uuid.NAMESPACE_URL,'python'))
  • uuid.uuid4() : 基於隨機數
#   經過隨機數來生成UUID. 使用的是僞隨機數有必定的重複機率.
print(uuid.uuid4())
  • uuid.uuid5(namespace, name)
#   經過計算命名空間和名字的SHA-1散列值來生成UUID, 算法與 uuid.uuid3() 相同
print(uuid.uuid5(uuid.NAMESPACE_URL,'python'))

注意:函數

1:Python中沒有基於DCE的,因此uuid2能夠忽略

2:uuid4存在機率性重複,有無映射性

3:若在Global的分佈式計算環境下,最好用uuid1

4:如有名字的惟一性要求,最好用uuid3或uuid5

相關文章
相關標籤/搜索