長(zhǎng)安古道馬遲遲易迹,高柳亂蟬嘶。夕陽島外平道,秋風(fēng)原上,目斷四天垂供炼。
歸云一去無蹤跡一屋,何處是前期?狎興生疏袋哼,酒徒蕭索冀墨,不似少年時(shí)。
一涛贯、UUID的介紹:
UUID: 通用唯一標(biāo)識(shí)符 ( Universally Unique Identifier ), 對(duì)于所有的UUID它可以保證在空間和時(shí)間上的唯一性. 它是通過MAC地址, 時(shí)間戳, 命名空間, 隨機(jī)數(shù), 偽隨機(jī)數(shù)來保證生成ID的唯一性, 有著固定的大小( 128 bit ). 它的唯一性和一致性特點(diǎn)使得可以無需注冊(cè)過程就能夠產(chǎn)生一個(gè)新的UUID. UUID可以被用作多種用途, 既可以用來短時(shí)間內(nèi)標(biāo)記一個(gè)對(duì)象, 也可以可靠的辨別網(wǎng)絡(luò)中的持久性對(duì)象.
為什么要使用UUID?
很多應(yīng)用場(chǎng)景需要一個(gè)id, 但是又不要求這個(gè)id 有具體的意義, 僅僅用來標(biāo)識(shí)一個(gè)對(duì)象. 常見的例子有數(shù)據(jù)庫表的id 字段. 另一個(gè)例子是前端的各種UI庫, 因?yàn)樗鼈兺ǔP枰獎(jiǎng)討B(tài)創(chuàng)建各種UI元素, 這些元素需要唯一的id , 這時(shí)候就需要使用UUID了.
二诽嘉、uuid模塊的使用:
python的uuid模塊提供UUID類和函數(shù)uuid1(), uuid3(), uuid4(), uuid5() 來生成1, 3, 4, 5各個(gè)版本的UUID ( 需要注意的是: python中沒有uuid2()這個(gè)函數(shù)). 對(duì)uuid模塊中最常用的幾個(gè)函數(shù)總結(jié)如下:
uuid.uuid1(node, clock_seq) : 基于MAC地址,時(shí)間戳弟翘,隨機(jī)數(shù)
基于MAC地址虫腋,時(shí)間戳,隨機(jī)數(shù)來生成唯一的uuid稀余,可以保證全球范圍內(nèi)的唯一性悦冀。但由于使用該方法生成的UUID中包含有主機(jī)的網(wǎng)絡(luò)地址, 因此可能危及隱私。 該函數(shù)有兩個(gè)參數(shù), 如果 node 參數(shù)未指定, 系統(tǒng)將會(huì)自動(dòng)調(diào)用 getnode() 函數(shù)來獲取主機(jī)的硬件地址. 如果 clock_seq 參數(shù)未指定系統(tǒng)會(huì)使用一個(gè)隨機(jī)產(chǎn)生的14位序列號(hào)來代替uuid.uuid2()
算法與uuid1相同睛琳,不同的是把時(shí)間戳的前4位置換為POSIX的UID盒蟆。不過需要注意的是python中沒有基于DCE的算法,所以python的uuid模塊中沒有uuid2這個(gè)方法师骗。uuid.uuid3(namespace, name) : 基于名字的MD5散列值
通過計(jì)算一個(gè)命名空間和名字的md5散列值來給出一個(gè)uuid历等,所以可以保證命名空間中的不同名字具有不同的uuid,但是相同的名字就是相同的uuid了辟癌。namespace并不是一個(gè)自己手動(dòng)指定的字符串或其他量寒屯,而是在uuid模塊中本身給出的一些值。比如uuid.NAMESPACE_DNS愿待,uuid.NAMESPACE_OID浩螺,uuid.NAMESPACE_OID這些值靴患。這些值本身也是UUID對(duì)象,根據(jù)一定的規(guī)則計(jì)算得出要出。uuid.uuid4() : 基于隨機(jī)數(shù)
通過隨機(jī)數(shù)來生成UUID. 使用的是偽隨機(jī)數(shù)有一定的重復(fù)概率uuid.uuid5(namespace, name) : 基于名字的SHA-1散列值
和uuid3基本相同鸳君,只不過采用的散列算法是sha1
三、uuid的簡(jiǎn)單使用:
import uuid
name = 'wangjifei'
namespace = uuid.NAMESPACE_OID
print(uuid.uuid1())
print(uuid.uuid3(namespace,name))
print(uuid.uuid4())
print(uuid.uuid5(namespace,name))
42a5d474-d276-11e8-be0c-001cc2340bf8
1c0451f9-4b46-381a-8039-43ecc91bc0c0
c5207330-6c9c-4285-bcca-163e24aaeac3
41e1be5c-b568-5e5d-8ce2-f4609fd3bec5