Laravel --實(shí)戰(zhàn)篇 UUID(唯一識(shí)別碼)

前言 : 一般的唯一識(shí)別id都是各種時(shí)間戳、毫秒級(jí)時(shí)間戳加php內(nèi)置函數(shù)或者加上隨機(jī)數(shù)等手段來(lái)生成的。 下面給大家介紹一個(gè)組件,也是我在各個(gè)實(shí)戰(zhàn)項(xiàng)目中必不可少的一個(gè)組件,ramsey/uuid。

一、ramsey/uuid的實(shí)現(xiàn)方式

● 機(jī)器hash(防止多臺(tái)機(jī)器之間ID沖突)
● 進(jìn)程ID(防止多進(jìn)程沖突)
● 時(shí)間戳(秒)
● 自增值(同一秒內(nèi)自增)

該方法號(hào)稱是1000年以內(nèi)不會(huì)出現(xiàn)重復(fù)數(shù)據(jù)的一種算法id(具體情況是不是這樣,博主也無(wú)從得知,沒有用那么大的數(shù)據(jù)量去特意做個(gè)測(cè)試).

二、適用場(chǎng)景

為什么說(shuō)我在每個(gè)項(xiàng)目中基本上都用到這個(gè)組建呢,記得博主當(dāng)初剛剛步入程序員的時(shí)候經(jīng)常為各個(gè)表的自增id的關(guān)聯(lián)查詢而頭疼 什么uid 、tuid 、 suid ....后來(lái)使用唯一識(shí)別id后大大減輕了這種負(fù)擔(dān)。
1.用戶唯一識(shí)別id
2.多商家時(shí) 產(chǎn)品唯一識(shí)別id
3.訂單號(hào)
4.多表時(shí)的唯一識(shí)別id
還有很多不做一一列舉...

三、使用方法

在Laravel的根目錄中執(zhí)行:

composer require ramsey/uuid

最簡(jiǎn)單直接的引入方法

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

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

    dd($str);

那么他可以獲取多少種數(shù)據(jù)類型呢?Uuid獲取出來(lái)是這樣的

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,
            ),

里面的各種長(zhǎng)度可以自定義獲取。另外Uuid的靜態(tài)方法有多少呢?在底部簡(jiǎn)主會(huì)引入原文作者的筆記,方法很多,到目前為止我都沒有用完。 但是簡(jiǎn)主經(jīng)常用的就是:

$data = Uuid::uuid1();
$data = Uuid::uuid2();
$data = Uuid::uuid3();
$data = Uuid::uuid4();
//括號(hào)里面也可以根據(jù)具體業(yè)務(wù)添加參數(shù)
$data = Uuid::uuid1('123123123');
$data = Uuid::uuid1(time());
...
...

如果用在用戶身上,基本上每個(gè)用戶從注冊(cè)開始就相當(dāng)于綁定了一個(gè)身份證(形容是不是很形象)
下面引入原文作者ramsey的原文筆記鏈接 大概快1900行的代碼筆記。
原文筆記

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、ramsey/uuid的實(shí)現(xiàn)方式 機(jī)器hash(防止多臺(tái)機(jī)器之間ID沖突)進(jìn)程ID(防止多進(jìn)程沖突)時(shí)間戳(秒...
    李景磊閱讀 2,957評(píng)論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,769評(píng)論 25 709
  • 旅行中的朋友發(fā)來(lái)一張小店的照片,門梁上寫著:古董·衣著·戀物癖。朋友說(shuō),看到后面三個(gè)字就想到了你。 嗯,我的確是一...
    寧締閱讀 2,291評(píng)論 9 42
  • 今天是星期一,晚上女兒放學(xué)回來(lái)拿出一張作業(yè)紙,作業(yè)記得歪歪扭扭的,我問她這是記得什么作業(yè),她指著紙上的字問我,媽媽...
    魏丹妮的媽媽閱讀 246評(píng)論 0 0

友情鏈接更多精彩內(nèi)容