PHP生成唯一RequestID類

2021-08-18 18:28:32 字數 2237 閱讀 4949

本文介紹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...