PHP實現(xiàn)的生成唯一RequestID類完整示例
本文實例講述了PHP實現(xiàn)的生成唯一RequestID類。分享給大家供大家參考,具體如下:
這里介紹PHP生成唯一RequestID類,使用session_create_id()與uniqid()方法,保證唯一性,提供完整代碼及演示,方便大家學(xué)習(xí)使用。
現(xiàn)在的系統(tǒng)設(shè)計一般使用分布式系統(tǒng),一個請求可能要調(diào)用幾個微服務(wù)處理,最后再把結(jié)果返回。當(dāng)請求出現(xiàn)問題時,我們很難去跟蹤是哪個微服務(wù)出現(xiàn)問題。
每個請求訪問服務(wù)器時,我們可以給這個訪問加入一個唯一標(biāo)識(RequestID),在請求開始,請求過程中,及請求結(jié)束時,把這個請求流程關(guān)鍵的數(shù)據(jù)寫入日志(例如訪問時的參數(shù),經(jīng)過那些方法,微服務(wù),結(jié)束時返回的數(shù)據(jù)等),當(dāng)訪問出現(xiàn)問題時用于參考,方便追蹤到問題。
例如一個請求需要經(jīng)過幾個微服務(wù)再返回輸出
請求->A->B->C-A->輸出
如果訪問過程沒有輸出,或輸出錯誤,我們可以根據(jù)RequestID找到A,B,C對應(yīng)的日志,檢查是哪個服務(wù)出現(xiàn)問題。
代碼如下:
RequestID.class.php
<?php /** * PHP生成唯一RequestID類 * Date: 2018-04-10 * Author: fdipzone * Version: 1.0 * * Description: * PHP實現(xiàn)生成唯一RequestID類,使用session_create_id()與uniqid()方法實現(xiàn),保證唯一性。 * * Func: * public generate 生成唯一請求id * private format 格式化請求id */ class RequestID{ // class start /** * 生成唯一請求id * @return String */ public static function generate(){ // 使用session_create_id()方法創(chuàng)建前綴 $prefix = session_create_id(date('YmdHis')); // 使用uniqid()方法創(chuàng)建唯一id $request_id = strtoupper(md5(uniqid($prefix, true))); // 格式化請求id return self::format($request_id); } /** * 格式化請求id * @param String $request_id 請求id * @param Array $format 格式 * @return String */ private static function format($request_id, $format='8,4,4,4,12'){ $tmp = array(); $offset = 0; $cut = explode(',', $format); // 根據(jù)設(shè)定格式化 if($cut){ foreach($cut as $v){ $tmp[] = substr($request_id, $offset, $v); $offset += $v; } } // 加入剩余部分 if($offset<strlen($request_id)){ $tmp[] = substr($request_id, $offset); } return implode('-', $tmp); } } // class end ?>
demo:
<?php require 'RequestID.class.php'; // 生成10個請求id for($i=0; $i<10; $i++){ echo RequestID::generate().PHP_EOL; } ?>
輸出:
16532925-4502-CDAD-23A2-463FC7B5803A
500B77AD-CD24-0DDA-9E6E-2FDF2DD7CA94
813143D0-958F-9F56-E04F-679598594452
E5EE1B0B-E0D6-3E60-D831-462C5A262FCE
79E714B5-A37F-4B5E-4EDE-83E18391EBF9
E1C440AB-FC2C-AC74-E79A-016FD59D9651
AE483861-1040-BE8D-E523-D7638D0F0D35
BBD7A03A-36C9-24B7-C453-FB1DDD6E201E
BF62C3E6-9C5F-22CB-668D-381863B35268
E97E1F44-F048-962A-5BF7-1113727551B1
注意session_create_id
方法需要php7.1以上的版本才可使用。
關(guān)于session_create_id方法可參考官網(wǎng)說明:
http://php.net/manual/zh/function.session-create-id.php
源碼下載地址:點(diǎn)擊此處本站下載。
PS:這里再為大家提供兩款相關(guān)在線工具供大家參考使用:
在線隨機(jī)數(shù)字/字符串生成工具:
http://tools.jb51.net/aideddesign/suijishu
在線隨機(jī)字符/隨機(jī)密碼生成工具:
http://tools.jb51.net/aideddesign/rnd_password
在線隨機(jī)數(shù)生成工具:
http://tools.jb51.net/aideddesign/rnd_num
在線隨機(jī)數(shù)/隨機(jī)密碼批量生成工具:
http://tools.jb51.net/aideddesign/rnd_pwd_tool
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
- PHP利用雪花(SnowFlake)算法生成唯一ID
- php生成唯一uid的解決方法詳解
- 高并發(fā)php uniqid不重復(fù)唯一標(biāo)識符生成方案
- 詳解php中生成標(biāo)準(zhǔn)uuid(guid)的方法
- php根據(jù)數(shù)據(jù)id自動生成編號的實現(xiàn)方法
- 3種php生成唯一id的方法
- 使用PHP uniqid函數(shù)生成唯一ID
- php中session_id()函數(shù)詳細(xì)介紹,會話id生成過程及session id長度
- php GUID生成函數(shù)和類
- php 生成唯一id的幾種解決方法
- php根據(jù)id生成10位不重復(fù)數(shù)字跟字母混合字符串
相關(guān)文章
PHP基于雙向鏈表與排序操作實現(xiàn)的會員排名功能示例
這篇文章主要介紹了PHP基于雙向鏈表與排序操作實現(xiàn)的會員排名功能,結(jié)合實例形式分析了php雙向鏈表的功能、定義及基于雙向鏈表的排序操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-12-12Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安裝配置方法
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安裝配置方法...2007-05-05PHP實現(xiàn)自動識別原編碼并對字符串進(jìn)行編碼轉(zhuǎn)換的方法
這篇文章主要介紹了PHP實現(xiàn)自動識別原編碼并對字符串進(jìn)行編碼轉(zhuǎn)換的方法,涉及php針對編碼的識別、轉(zhuǎn)換及數(shù)組的遍歷等相關(guān)操作技巧,需要的朋友可以參考下2016-07-07WampServer下安裝多個版本的PHP、mysql、apache圖文教程
這篇文章主要介紹了WampServer下安裝多個版本的PHP、mysql、apache圖文教程,需要的朋友可以參考下2015-01-01PHP JSAPI調(diào)支付API實現(xiàn)微信支付功能詳解
本人最近做了微信支付開發(fā),是第一次接觸,其中走了很多彎路,遇到的問題也很多。為了讓和我一樣的新人不再遇到類似的問題,我把我的開發(fā)步驟和問題寫出來以供參考,這篇文章主要介紹了PHP JSAPI調(diào)支付API實現(xiàn)微信支付功能2022-11-11PHP中VC6、VC9、TS、NTS版本的區(qū)別與用法詳解
ISAPI執(zhí)行方式是以DLL動態(tài)庫的形式使用,可以在被用戶請求后執(zhí)行,在處理完一個用戶請求后不會馬上消失,所以需要進(jìn)行線程安全檢查2013-10-10php和js實現(xiàn)根據(jù)子網(wǎng)掩碼和ip計算子網(wǎng)功能示例
這篇文章主要介紹了php和js實現(xiàn)根據(jù)子網(wǎng)掩碼和ip計算子網(wǎng)功能,結(jié)合實例形式分析了PHP與js針對IP地址子網(wǎng)掩碼計算的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11php中$美元符號與Zen Coding沖突問題解決方法分享
Zen Coding是使用仿CSS選擇器的語法來快速開發(fā)HTML和CSS ——由Sergey Chikuyonok開發(fā)。 Zen Coding由兩個核心組件組成:一個縮寫擴(kuò)展器(縮寫為像CSS一樣的選擇器)和上下文無關(guān)的HTML標(biāo)簽對匹配器。2014-05-05