我有一个密码恢复系统,允许用户恢复他们的密码。这些请求存储在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;
答案 0 :(得分:0)
我认为你的部分问题是你正在使用错误的工具来完成工作。你真正需要的是queueing system。
稍微改变你的设计。不要将所有工作都放在数据库中,而是让应用程序层将事物添加到队列中,并定期检查要执行的作业。大多数队列都存在于内存中,因此读取速度非常快,而且很多队列都可以添加延迟,直到项目在队列中可见。
或者,使用cron作业检查数据库,基本上每十分钟做一次。