本文介紹php生成唯一requestid類,使用session_create_id()與uniqid()方法,保證唯一性,提供完整**及演示,方便大家學習使用。
現在的系統設計一般使用分布式系統,乙個請求可能要呼叫幾個微服務處理,最後再把結果返回。當請求出現問題時,我們很難去跟蹤是哪個微服務出現問題。
每個請求訪問伺服器時,我們可以給這個訪問加入乙個唯一標識(requestid),在請求開始,請求過程中,及請求結束時,把這個請求流程關鍵的資料寫入日誌(例如訪問時的引數,經過那些方法,微服務,結束時返回的資料等),當訪問出現問題時用於參考,方便追蹤到問題。
例如乙個請求需要經過幾個微服務再返回輸出
請求->a->b->c-a->輸出如果訪問過程沒有輸出,或輸出錯誤,我們可以根據requestid找到a,b,c對應的日誌,檢查是哪個服務出現問題。
requestid.class.php
<?php
/** * php生成唯一requestid類
* date: 2018-04-10
* author: fdipzone
* version: 1.0
* * description:
* php實現生成唯一requestid類,使用session_create_id()與uniqid()方法實現,保證唯一性。
* * func:
* public generate 生成唯一請求id
* private format 格式化請求id
*/class
requestid
/*** 格式化請求id
*@param string $request_id 請求id
*@param array $format 格式
*@return string
*/private
static
function
format
($request_id, $format='8,4,4,4,12')
}// 加入剩餘部分
if($offset
$request_id))
return implode('-', $tmp);
}} // class end
?>
demo:
<?php
require
'requestid.class.php';
// 生成10個請求id
for($i=0; $i
<10; $i++)
?>
輸出:
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以上的版本才可使用。
關於session_create_id方法可參考官網說明:
php 生成唯一ID
function guid factor prefix suffix 生成因子 機器毫秒,使用者瀏覽器與作業系統資訊,使用者ip,隨機因子,及自定義 factor 因子 原理 自定義 factor 因子 例如可使用使用者 user id 模組標識 product,order.字首 prefix 可用...
php生成唯一id
網上查了下,有很多的方法 1 md5 time mt rand 1,1000000 這種方法有一定的概率會出現重複 2 php內建函式uniqid uniqid 函式基於以微秒計的當前時間,生成乙個唯一的 id.w3school參考手冊有一句話 由於基於系統時間,通過該函式生成的 id 不是最佳的。...
PHP生成唯一ID
php自帶乙個生成唯一id的方法uniqid 我們還可以傳入引數,這個引數作為生成的唯一id的字首,該方法生成的id是基於當前時間微秒數生成的id,保證了id的唯一性。示例 prefix itbsl 說明 string uniqud string prefix bool more entropy f...