首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使计时器在过期的记录上运行代码

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

Stack Overflow用户
提问于 2011-08-24 17:24:09
回答 3查看 256关注 0票数 2

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

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

我考虑过的方案中,没有一个是令我兴奋的:

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

在PHP应用程序中,这通常是如何做到的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-25 09:46:56

我也会选择cronjob选项。

不过,我的应用程序中也有逻辑,知道如何处理(或忽略)过期的记录。像cron这样的服务可能会中断,所以不用依赖它是很好的。

不幸的是,DBMS并没有给我们很大的灵活性,而且如果遇到这些“过期”记录之一,您将不想进行数据库维护。

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

票数 2
EN

Stack Overflow用户

发布于 2011-08-25 10:59:04

以下是你没有考虑过的一种选择:

您可以使用MySQL事件调度器定期在数据库中运行存储的过期例程。

这种方法的一些优点是:

  • 平台无关,在UNIX和Windows上以相同的方式工作。
  • 设置起来很容易。无需向用户解释如何设置cron作业。您只需与数据库架构一起创建该事件。

缺点:

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

示例:

代码语言:javascript
运行
AI代码解释
复制
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 ;

上面的代码将每分钟从数据表中删除任何行,这些数据表的UNIX时间戳超过1小时。

票数 3
EN

Stack Overflow用户

发布于 2011-08-24 17:43:16

我会选择cronjob选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7184144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档