热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

canteenphp,PHP脚本任务优化思路或改进方案?

脚本部分:date_default_timezone_set(PRC);require_once(canteenMySQL.php);$mysqlMySQL::get

脚本部分:

date_default_timezone_set('PRC');

require_once('canteen/MySQL.php');

$mysql = MySQL::getInstance('localhost', 'root', '123456', 'canteens', 'UTF-8');

$user_balance = $mysql->all("SELECT id,balance FROM `user`;");

$json_data['bl'] = json_encode($user_balance);

require_once("E:\WWW\canteens\application\libraries\DESedeCoder.php");

require_once("E:\WWW\canteens\application\libraries\Curl.php");

// 上传终端数据库的最新用户金额至主数据库

$json_data['token'] = DESedeCoder::encrypt(date('YmdH'), "*****");

$result = Curl::send("http://canteen.com/module/resful/main/bat_balance", $json_data, 'post');

$result = json_decode($result, TRUE);

if((int)$result['status'] === 200) {

$mysql->logs('定时更新金额ok!', 'cron.log');

}else if((int)$result['status'] === 666){

$mysql->logs('金额更新'.$result['msg'], 'cron.log');

}else if($result['status']){

$mysql->logs($result['status'].' '.$result['msg'], 'cron.log');

}else {

$mysql->logs('master服务器宕机', 'cron.log');

}

// 上传终端数据库未上传至主数据库的消费记录

$send_data['token'] = DESedeCoder::encrypt(date('YmdH'), "*****");

$upt_consume = $mysql->all("SELECT id,user_id,monetary,consume_time,consume_type,card_reader_ip FROM `consum_record` WHERE upload_state=0");

$send_data['upt'] = json_encode($upt_consume);

$result = Curl::send("http://canteen.com/module/resful/main/upt_consume", $send_data, 'post');

$res_arr = json_decode($result,TRUE);

if($res_arr['status'] == 200 || $res_arr['status'] == 204) {

$ok_id = json_decode($res_arr['ok_id'], TRUE);

foreach ($ok_id as $val) {

$mysql->upDate('consum_record', array('upload_state' => 1), array('id='=>$val));

}

if($res_arr['status'] == 200) {

$mysql->logs('定时上传消费记录ok!', 'cron.log');

}else {

$mysql->logs('定时上传消费记录部分ok!', 'cron.log');

}

}else if($res_arr['status'] == 666) {

$mysql->logs('消费记录上传'.$result['msg'], 'cron.log');

}else if($res_arr['status']){

$mysql->logs($result['status'].' '.$result['msg'], 'cron.log');

}else {

$mysql->logs('master服务器宕机', 'cron.log');

}

Curl部分

private static function doRequest($is_post = 0) {

$ch = curl_init();//初始化curl

curl_setopt($ch, CURLOPT_URL, self::$url);//抓取指定网页

curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);

// 来源一定要设置成来自本站

curl_setopt($ch, CURLOPT_REFERER, self::$oriUrl);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上

if($is_post == 1) curl_setopt($ch, CURLOPT_POST, $is_post);//post提交方式

if (!empty(self::$data)) {

self::$data = self::dealPostData(self::$data);

curl_setopt($ch, CURLOPT_POSTFIELDS, self::$data);

}

$data = curl_exec($ch);//运行curl

curl_close($ch);

return $data;

}

以上是我执行脚本的代码,具体操作流程有以下几点:

生成token

获取数据库所有用户ID和金额集合

token和用户ID、金额数据json化通过curl发送给接口api,接口更新用户最新金额数据

根据返回状态码 记录log

用户消费记录重复上面4步,不同的是,获取本机未上传的消费记录数据;

消费记录接口,接收到消费数据的时候,插入到接口所在的数据库;而且多了一步的是,消费记录上传成功后,会返回上传成功的本机消费记录ID,根据这些消费记录ID,更新本机数据库消费记录上传状态,没上传的为0,上传成功的为1

用curl发送的消费记录数据量挺大的差不多在10W+字节

用户量在200+,300条以下;消费记录500+,1000条以下;

遇到的问题,当我执行这段脚本的时候,会出现脚本执行超时的提示,大于30s

bVIWp7?w=1030&h=177

看上面的提示内容可以得知,两次curl请求都到位了,只是在我更新本地消费记录上传状态的时候,时间不够了,当然我这个只是出现诸多问题的某一种,以后还可能会出现api接口压力过大,导致发送数据都不成功,当然这都是后话了。

只加密两个token和取出两段数据的时间可以忽略不计,大约在300~400ms之间;

求解决思路或者优化思路;



推荐阅读
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 在探讨 MySQL 正则表达式 REGEXP 的功能与应用之前,我们先通过一个小实验来对比 REGEXP 和 LIKE 的性能。通过具体的代码示例,我们将评估这两种查询方式的效率,以确定 REGEXP 是否值得深入研究。实验结果将为后续的详细解析提供基础。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 在Node.js中调用MySQL存储过程`updateUser(p1, p2, @p3)`时,其中`@p3`为输出参数。若更新操作失败,则返回0;成功则返回1。本文将详细介绍如何正确获取存储过程的返回结果,并确保在实际应用中能够顺利执行。 ... [详细]
  • 本文详细探讨了MySQL数据库实例化参数的优化方法及其在实例查询中的应用。通过具体的源代码示例,介绍了如何高效地配置和查询MySQL实例,为开发者提供了有价值的参考和实践指导。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 本文介绍了MySQL中一些基本但重要的数学函数,包括角度与弧度之间的转换函数RADIANS(X)和DEGREES(X),以及正弦函数。RADIANS(X)用于将角度值转换为弧度值,而DEGREES(X)则将弧度值转换为角度值。这些函数在处理涉及角度和弧度的计算时非常有用,能够简化复杂的数学运算。此外,正弦函数在三角学和工程计算中也具有广泛的应用,能够帮助用户更高效地进行数据处理和分析。 ... [详细]
  • 解决MySQL 5.1服务器无法正确识别中文字符的问题
    在使用MySQL 5.1服务器时,可能会遇到无法正确识别中文字符的问题。由于相关资料较少且不够全面,本文将详细阐述解决方案。首先,需要检查MySQL的配置文件,确保字符集设置正确,并通过命令行工具验证当前的字符编码配置。此外,建议更新到最新版本以避免此类问题。 ... [详细]
  • 如何有效防御网站中的SQL注入攻击
    本期文章将深入探讨网站如何有效防御SQL注入攻击。我们将从技术层面详细解析防范措施,并结合实际案例进行阐述,旨在帮助读者全面了解并掌握有效的防护策略。希望本文能为您的网络安全提供有益参考。 ... [详细]
  • 在将Excel数据导入MySQL数据库的过程中,如何确保不会生成重复记录?本文介绍了一种方法,通过PHP脚本检查数据库中是否存在相同的“Code”字段值,从而避免重复记录的产生。该方法不仅提高了数据导入的准确性,还增强了系统的健壮性。 ... [详细]
  • 针对MySQL Undo空间满载及Oracle Undo表空间溢出的问题,本文详细探讨了其原因与解决策略。首先,通过启动SQL*Plus并以SYS用户身份登录数据库,查询当前数据库的UNDO表空间名称,确认当前状态。接着,分析导致Undo空间满载的常见原因,如长时间运行的事务、频繁的更新操作等,并提出相应的解决方案,包括调整Undo表空间大小、优化事务管理、定期清理历史数据等。最后,结合实际案例,提供具体的实施步骤和注意事项,帮助DBA有效应对这些问题。 ... [详细]
  • MyISAM和InnoDB是MySQL中最为广泛使用的两种存储引擎,每种引擎都有其独特的优势和适用场景。MyISAM引擎以其简单的结构和高效的读取速度著称,适用于以读操作为主、对事务支持要求不高的应用。而InnoDB引擎则以其强大的事务处理能力和行级锁定机制,在需要高并发写操作和数据完整性的场景下表现出色。选择合适的存储引擎应综合考虑业务需求、性能要求和数据一致性等因素。 ... [详细]
  • 深入解析 Java UTC 时间处理技术与应用 ... [详细]
author-avatar
云姵肇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有