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

mysql订单延时_PHP如何实现订单的延时处理详解

业务需求订单是我们在日常开发中经常会遇到的一个功能,最近在做业务的时候需要实现客户下单之后订单超时未支付自动取消的功能,刚开始确认了几种方法࿱

业务需求

订单是我们在日常开发中经常会遇到的一个功能,最近在做业务的时候需要实现客户下单之后订单超时未支付自动取消的功能,刚开始确认了几种方法:

客户端到时间请求取消

服务端定时查询有没有需要取消的订单,然后批量处理

下单后创建定时器,延时处理

使用redis或者memcache存储,设置过期时间,自动删除

综合考虑上述方法,第一种最先排除,因为如果客户把APP后台禁止或者网络连接禁止,那么就无法发给服务端请求,订单就会一直是未处理状态;第二种方法使用的比较多,不过存在准确度的问题,还有需要确认定时任务的周期,暂时列为后补方法;第四种方法存在的问题就是订单如果删除就是物理删除,无法统计未处理数据(当然可以存redis时候顺便存在mysql这样的数据库做长久存储然后用方法二定时处理)。

最终准备使用方法三。

再确认使用方法3的时候,由于使用的PHP这种开发语言,所以想实现定时器功能需要借助Swoole或者workerman。由于Swoole是C开发的扩展框架,性能方面肯定比较好,就选了Swoole。

前期准备

使用Swoole首先需要在服务器上安装Swoole扩展,安装方法和安装其他扩展大同小异,可以参考这边文章

安装完之后检测下扩展是否正常安装,查看phpinfo或者PHP-m,如果出现Swoole,则说明安装成功

Swoole官方文档有定时器的相关文档

开始测试

我们创建一个swoole_test.php文件和一个log.txt文件(用来测试),swoole_test.php代码如下:

swoole_timer_after(3000, function () {

append_log(time());

echo "after 3000ms.n";

});

function append_log($str) {

$dir = 'log.txt';

$fh = fopen($dir, "a");

fwrite($fh, $str."n");

fclose($fh);

}

然后在网页访问这个PHP文件,结果如下:

901b65f14cf85cf80dea63ce86d22c94.png

然后在Linux终端运行PHP:/usr/local/php7/bin/php /home/app/swoole_test.php,结果如下:

bddfda6f99ea4d413ab0c1c97d9c19c0.png

内心一阵。。。

原来定时器只能在cli模式下,那么这个想法怕是要GG了,难道就栽倒这里了吗,难道就没有别的方法了吗?就在我欲哭无泪的时候突然灵光乍现,一个词闪到我的脑海:Python!

对,我们不能单单靠着PHP啊,还有Python这种神奇的语言呢,我们知道Python的os模块里的os.system方法是可以执行命令行的,那么不就可以实现在cli模式下运行刚才的swoole_test.php文件了么。

内心一阵激动后,觉得测试是否可行

我们知道Linux都是自带Python的,但是不同的版本Python版本不同,有的自带的是Python2.6,版本过低了,所以需要装一个高版本的,这里我选择Python3,注意不要覆盖系统自带的Python2 。以下是大致的安装步骤:



推荐阅读
  • 包含phppdoerrorcode的词条 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • Swoole是针对PHP的生产级异步编程框架。它是一种用纯C语言编写的PHP扩展,它使PHP开发人员能够在PHP中编写高性能,可扩展的并发TCP ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • http:simple-is-better.comnews1047Firefly是免费、开源、稳定、快速扩展、能“热更新”的分布式游戏服务器端框架,采用Python编 ... [详细]
  • PHP语言之所以能有今天的地位,得益于PHP语言设计者一直遵从实用主义,将技术的复杂性隐藏在底层。PHP语言入门简单,容易掌握,程序健壮性好。 ... [详细]
  • C语言编写线程池的简单实现方法
    2019独角兽企业重金招聘Python工程师标准好文章,一起分享——有时我们会需要大量线程来处理一些相互独立的任务,为了避免频繁的申请释放线程所带 ... [详细]
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
author-avatar
嘉sen
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有