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

时间:2011-08-25 01:24:09

标签: php mysql timer

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

我基本上需要一个BPMN Timer事件。

我考虑的选项,我都不满意:

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

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

3 个答案:

答案 0 :(得分:3)

以下是您未考虑的选项:

您可以使用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 表中任何行时间戳超过1小时的行。

答案 1 :(得分:2)

我也会选择cronjob选项。

然而,我也会在我的应用程序中拥有知道如何处理(或忽略)过期记录的逻辑。像cron这样的服务可以破解,所以 NOT 不得不依赖它。

不幸的是,DBMS并没有给我们带来这种灵活性,如果您遇到其中一条“过期”记录,您也不会想要进行数据库维护。

您最好通过查询,视图的使用或简单的应用程序逻辑来排除它们。

答案 2 :(得分:1)

我会选择 cronjob 选项。