【问题标题】:Create a MySQL event that efficiently deletes rows exactly 10 minutes after creation创建一个 MySQL 事件,在创建后 10 分钟有效地删除行
【发布时间】:2015-04-06 10:25:33
【问题描述】:

我有一个密码恢复系统,允许用户恢复他们的密码。这些请求存储在recoveries 表中。此表包含 expiry 列中的时间戳,用于说明每行的创建时间。

我希望此事件针对 recoveries 中的每个新行单独运行,以便它们在创建后 10 分钟正好过期。

我有这段代码,但我不知道如何让它在recoveries 中创建每一行 后正好运行 10 分钟:

CREATE EVENT `delete_recoveries`
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
ON COMPLETION PRESERVE

DO BEGIN
      DELETE FROM `recoveries` WHERE `expiry` < DATE_SUB(NOW(), INTERVAL 10 MINUTE);
END;

【问题讨论】:

  • 这与您之前的问题非常接近:stackoverflow.com/questions/29457483/…。您真的不希望在某事发生后每 10 分钟触发一次事件。这不是最好的解决方案。
  • 是的,但没有人给我一个好的答案。如果这不是正确的解决方案,我还能做什么?
  • 您得到了满足您需求的其他问题的出色答案,包括任意精确的 10 分钟截止时间,但也非常有效。你应该回去重新阅读它,直到你明白为什么会这样。

标签: php mysql events cron


【解决方案1】:

我认为您的部分问题是您使用了错误的工具来完成这项工作。你真正需要的是queueing system

稍微改变你的设计。不要将所有工作都放在数据库中,而是让您的应用程序层将内容添加到队列中,并定期检查它是否有工作要做。大多数队列都存在于内存中,因此读取速度非常快,而且对于其中的许多队列,您可以添加延迟,直到某个项目在队列中可见。

或者,使用 cron 作业检查您的数据库,基本上每十分钟执行一次。

【讨论】:

    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2020-07-04
    • 2021-11-04
    • 2010-09-20
    相关资源
    最近更新 更多