我正在开发一个网络应用程序(PHP/MySQL),我需要在其中实现计时器(记录id
在expiration_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/