Laravel --實戰篇 UUID(唯一識別碼)

weixin_34249678發表於2017-03-20

前言 : 一般的唯一識別id都是各種時間戳、毫秒級時間戳加php內建函式或者加上隨機數等手段來生成的。 下面給大家介紹一個元件,也是我在各個實戰專案中必不可少的一個元件,ramsey/uuid。

一、ramsey/uuid的實現方式

● 機器hash(防止多臺機器之間ID衝突)
● 程式ID(防止多程式衝突)
● 時間戳(秒)
● 自增值(同一秒內自增)

該方法號稱是1000年以內不會出現重複資料的一種演算法id(具體情況是不是這樣,博主也無從得知,沒有用那麼大的資料量去特意做個測試).

二、適用場景

為什麼說我在每個專案中基本上都用到這個組建呢,記得博主當初剛剛步入程式設計師的時候經常為各個表的自增id的關聯查詢而頭疼 什麼uid 、tuid 、 suid ....後來使用唯一識別id後大大減輕了這種負擔。
1.使用者唯一識別id
2.多商家時 產品唯一識別id
3.訂單號
4.多表時的唯一識別id
還有很多不做一一列舉...

三、使用方法

在Laravel的根目錄中執行:

composer require ramsey/uuid

最簡單直接的引入方法

// 名稱空間
use Ramsey\Uuid\Uuid;

    $data = Uuid::uuid1();
    $str = $data->getHex();    //32位字串方法

    dd($str);

那麼他可以獲取多少種資料型別呢?Uuid獲取出來是這樣的

array(  
                'string' => '6ba7b810-9dad-11d1-80b4-00c04fd430c8',
                'curly' => '{6ba7b810-9dad-11d1-80b4-00c04fd430c8}',
                'hex' => '6ba7b8109dad11d180b400c04fd430c8',
                'bytes' => 'a6e4EJ2tEdGAtADAT9QwyA==',
                'int' => '143098242404177361603877621312831893704',
                'fields' => array(
                    'time_low' => '6ba7b810',
                    'time_mid' => '9dad',
                    'time_hi_and_version' => '11d1',
                    'clock_seq_hi_and_reserved' => '80',
                    'clock_seq_low' => 'b4',
                    'node' => '00c04fd430c8',
                ),
                'urn' => 'urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8',
                'time' => '1d19dad6ba7b810',
                'clock_seq' => '00b4',
                'variant' => Uuid::RFC_4122,
                'version' => 1,
            ),

裡面的各種長度可以自定義獲取。另外Uuid的靜態方法有多少呢?在底部簡主會引入原文作者的筆記,方法很多,到目前為止我都沒有用完。 但是簡主經常用的就是:

$data = Uuid::uuid1();
$data = Uuid::uuid2();
$data = Uuid::uuid3();
$data = Uuid::uuid4();
//括號裡面也可以根據具體業務新增引數
$data = Uuid::uuid1('123123123');
$data = Uuid::uuid1(time());
...
...

如果用在使用者身上,基本上每個使用者從註冊開始就相當於繫結了一個身份證(形容是不是很形象)
下面引入原文作者ramsey的原文筆記連結 大概快1900行的程式碼筆記。
原文筆記

相關文章