PHP生成唯一RequestID类
本文介绍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{ // class start/*** 生成唯一请求id* @return String*/public static function generate(){// 使用session_create_id()方法创建前缀$prefix = session_create_id(date('YmdHis'));// 使用uniqid()方法创建唯一id$request_id = strtoupper(md5(uniqid($prefix, true)));// 格式化请求idreturn 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);// 根据设定格式化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以上的版本才可使用。
关于session_create_id方法可参考官网说明:
http://php.net/manual/zh/function.session-create-id.php
源码下载地址:点击查看
PHP生成唯一RequestID类相关推荐
- 生成唯一订单号 工具类
package com.jsy.basic.util.utils;import java.text.SimpleDateFormat; import java.util.Date;/*** @prog ...
- java读取ES配置生成ES管理类,获取ES连接
java读取ES配置生成ES管理类,获取ES连接 1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询, ...
- java 有序列表_关于算法:在Java中为列表列表生成唯一的有序非重复组合
我知道有很多类似的问题,并且已经阅读了几个小时.但是它们似乎都不符合我的要求. 我有列表列表(list >),列表可以是任何大小. 例: 我的外部列表大小是:4 清单内容 1. list(0) ...
- php 自增,php 根据自增id创建唯一编号类
在开发过程中,我们数据表一般都使用自增数字作为id主键,而id是数字型,不容易理解.我们把id按一定格式转为编号后,很容易根据编号知道代表的是什么内容. 例如订单表id=201601111976812 ...
- java生成唯一有序序列号_分布式唯一 ID 之 Snowflake 算法
SegmentFault 社区专栏:全栈修仙之路作者:semlinker No.1 Snowflake 简介 1.1 什么是 Snowflake Snowflake is a service used ...
- 小程序使用sass_如何使用Sass Maps生成所有实用程序类
小程序使用sass by Sarah Dayan 通过莎拉·达扬 如何使用Sass Maps生成所有实用程序类 (How to generate all your utility classes wi ...
- 为ASP.NET 2.0网站生成唯一程序集
在Visual Studio 2003下开发网站的都知道ASP.NET 1.1网站生成后都是一个唯一命名的程序集(项目名称.DLL),但是这种情况在Visual Studio 2005的网站开发中不见 ...
- java如何用雪花算法批量生成唯一编码(保证位数不过长)?
最近有点忙,现在稍微闲一些,就想写写最近遇到的一些业务. 业务:一些商户.市场.档口等主体需要有唯一编码. 思路:一些前缀+雪花算法,此时位数过多,再转成六十四进制缩短位数即可.同时为了实现批量生成唯 ...
- java 获得唯一 数字_java生成唯一数字
java生成唯一数字 用UUID类生成唯一标识的时候,会生成一个十六进制的整数,但是不能作为数据库long型字段的唯一标识,用下面的办法可以实现数据库long型标识的生成: public class ...
最新文章
- 6. 函数参数 与 展开运算符
- vsftp中配置默认目录
- openSUSE-openOffice无法输入中文
- nGQL知识点总结-20210719
- Spring mvc HandlerMapping 实现机制
- StarUML启动报RPC服务器不可用错误
- MySQL服务的启动和停止
- android 为什么fragment在调用hide方法后没有生效_Android 多 Fragment 切换优化
- PAT 乙级 1023. 组个最小数 (20) Java版
- .pem和.pk8是什么文件?(转载)
- 我用Java框架Guava解决了空指针异常问题
- python 彩票图表下载_python彩票
- 网络安全面试常见问题
- python选取tensor某一维_超简单!pytorch入门教程(一):Tensor
- 3310复刻版 java_诺基亚3310复刻版评测:经典回归 情怀满满
- DevOps落地实践及案例分享
- 测试大咖漫谈测试人职业发展
- 2021_WWW_Self-Supervised Multi-Channel Hypergraph Convolutional Network for Social Recommendation
- CentOS7下安装CDH,clouderamanager,hadoop
- window系统下nodejs安装及环境配置
热门文章
- java循环队列入队出队算法_循环队列实现
- 豆瓣前250个电影的相关分析
- seo要学什么东西?
- 设一棵树T的度为4,其中度为1,2,3,4的结点个数分别为4,2,1,1。则T中的叶子结点为
- 大数据哪个省才是高考地狱_是一名数据科学家,确实是地狱附近最性感的工作...
- 《Linux From Scratch》第三部分:构建LFS系统 第七章:基本系统配置- 7.9. 创建 /etc/shells 文件...
- java交易撮合怎么实现_「康力电梯002367」“股票实时交易系统如何实现高并发撮合交易?最好有java架构“java 股票分析工具-京东方a小-seo金融...
- python采集链家二手房信息
- CentOS 6.4使用Nginx配置文件服务器
- [CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it