App
来源:互联网 发布:无缝拼接软件 编辑:程序博客网 时间:2024/04/26 01:06
问题描述:App 通过uri进行http协议传输时 有一些线上BUG查询起来没有什么头绪 为了解决这个问题进行优化和改进
解决方案 方案分为两部分:
业务线中读取PHP缓存,写入Redis 在脚本中,取出redis缓存 , 写入Log文件 代码如下。
/** * @var继承的子类如有构造方法、记得调用父类方法、验证登录 */ public function __construct(){ parent::__construct(); // 登录验证 if($this->_auth) $this->auth(); // 初始化api调用记录 在这里开启缓冲区 ob_start(); // 检查接口是否停用 $this->checkForbidRoute(); } /** * 记录日志 */ public function __destruct(){ # 获取php执行后缓冲区的内容 $content = ob_get_contents(); # 输出缓冲区的内容、并关闭缓冲区 ob_end_flush(); # 开始处理日志记录 如果不做登录验证的不记录日志 } #page层使用redis后 上个连接将不可用 重新获取 $redis = new Redis(); $result = json_encode($apiLogRows); $redis->rpush($redis_key,$result); //在开始时调用 在对象执行结束时获取内容 Push到队列中
在接口通过http请求时 按照请求的顺序和需要的字段 写入Redis队列中 下一步就是取出数据 写入log 代码如下…
# 获取redis对象$redis = getRedis();# 队列名称$queue_name = Api_App_SystemConfig::CLIENT_API_LOG_KEY;# 队列名称$login_queue_name = Api_App_SystemConfig::LOGIN_API_LOG_KEY;# 开始时间$startTime = getmicrotime();# 读取环境$dev = strtolower(MainCommonConfig::RUN_MODE) == 'dev';# 测试十二小时执行一次 线上一小时执行一次$execut_time = $dev ? 60*60*12 : 60*60;do{ $row = $redis->lpop($queue_name); $login_row = $redis->lpop($login_queue_name); if(!$row&&!$login_row){ # 休息一秒 sleep(1); }else{ if(!empty($row)){ $data = json_decode($row,true); # 写入日志文件 类本身已经做了缓存 Gj_Logger::getLogger('clientApiAccess','/log')->info($data); # 线上只记录日志 测试记录表和日志 if($dev){ $data['client_ip'] = ip2long($data['client_ip']); $data = array_map(function($val){return is_array($val)?json_encode($val,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE):$val;},$data); # addClientapiAccessLog($data); } } if(!empty($login_row)){ $login_data = json_decode($login_row,true); # 写入日志文件 类本身已经做了缓存 Gj_Logger::getLogger('clientApiAccess','/log')->info($login_data); } }}while((getmicrotime()-$startTime)<=$execut_time);# 脚本每小时执行一次
谢谢大家的阅读~~有疑问的小伙伴在底下留言我 我会及时回复你~
0 0
- App
- app
- app
- App
- app
- app
- APP
- APP
- App
- app
- APP
- App
- APP
- app
- Console APP&&WIN32 APP
- 打包 app上传app
- app调用app
- web app Native app
- caffe下构建自己的项目文件夹
- LeetCode No.73 SetMatrixZeroes
- Java打印Excel文件 Jacob打印Excel文件
- POJ 1509 Glass Beads(最小表示法)
- python操作MySQL数据库增删改查
- App
- 算法训练 出现次数最多的整数
- (原创)我对未来的人类的发展,以及AI技术发展的一些思考。
- linux下C++/ json库的编译及例程
- Android自定义控件系列(七)—验证码倒计时
- 第三周Linux课堂学习
- 正则验证的工具类
- Unity优化相关总结(资源)
- 多个属性动画同时执行的方法