php - 使计时器在过期记录上运行代码

标签 php mysql timer

我正在开发一个网络应用程序(PHP/MySQL),我需要在其中实现计时器(记录idexpiration_date到期),其中到期涉及记录的state 正在更新,并且任意代码正在根据需要执行。

我基本上需要一个 BPMN 计时器事件。

我考虑过的选项,但没有一个让我感到兴奋:

  • Cronjob 调用应用程序中的函数,仅查询和更新过期记录。
  • 在代码中的常用调用点,以固定的时间间隔调用此函数。

这在 PHP 应用程序中通常是如何完成的?

最佳答案

以下是您未考虑过的选项:

您可以使用MySQL Event Scheduler定期运行数据库中存储的过期例程。

这种方法的一些好处:

  • 独立于平台,在 UNIX 和 Windows 上的工作方式相同。
  • 易于设置。无需向用户解释如何设置 cron 作业。您只需将事件与数据库架构一起创建即可。

缺点:

  • MySQL 中默认未启用。需要将 event_scheduler=on 放入 my.cnf 或以其他方式启用它。
  • 如果我没记错的话,需要 MySQL 5.1 或更高版本。

示例:

DROP EVENT IF EXISTS expire_event;
DELIMITER //
CREATE EVENT expire_event
ON SCHEDULE EVERY 1 MINUTE
DO BEGIN
    DELETE FROM data WHERE time < UNIX_TIMESTAMP(NOW() - INTERVAL 1 HOUR);
END //
DELIMITER ;

上面的代码将每分钟从 data 表中删除 UNIX 时间戳早于 1 小时的所有行。

关于php - 使计时器在过期记录上运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7184144/

相关文章:

php - MySQL - 获取平均值不起作用

MySQL 慢速第一次查询键限制 1

时钟分钟更改的 Java 事件监听器

java - 时间到期时从 Recyclerview 中删除项目

c# - 哪个 C# 定时器?

php - 表格的选定行及其 PHP 值

javascript - API 返回 3 条记录 - 主干集合不匹配

php - 如何在我的 php 脚本中隐藏我的 mySQL 登录信息?

mysql - MySQL触发器中的多个if语句

PHP 无法重定向到某些页面