我目前正在开发一个相当大的纯动态网站,其中包含需要过期的各种信息。以前我不必担心过期,因为它是在用户登录时处理的(如果需要,将运行各种检查以使登录的用户数据到期)但是随着我们增加的成员基数和用户的不活动状态,数据库中的数据变得越来越老。通常这不是问题,但旧数据会影响其他站点的功能/特性(基于点的系统功能,团队构建功能等)。存储在数据库中的所有数据都有一个到期计时器,所以我只需做是使用php脚本软删除数据,但我不想在页面加载时触发这个(我想避免减慢用户页面加载速度)
除了cronjobs之外还有哪些替代品。我希望能够通过php设置和管理后台服务,所以每次我需要新添加的东西时都不需要编辑/创建crons等。
理想情况下,我正在寻找或尝试实现一个允许我插入带有特定指令(排队特定更新)的数据库行的系统,它将在后端处理。我希望/需要尽快更新数据,以避免我们现在遇到的问题。这个后台处理器最终将处理更大的更复杂的任务,如自动安排现场事件(锦标赛),或自动生成这些锦标赛的括号。感谢所有帮助!
答案 0 :(得分:0)
您可以尝试使用MySQL event scheduler,这样您就可以启动一个每x天重新运行一次的SQL脚本:
CREATE EVENT `delete_old_data`
ON SCHEDULE schedule
ON COMPLETION NOT PRESERVE
ENABLE
DO BEGIN
-- event body, something like delete all rows older than 5 days
END;
老实说,要做更多复杂的活动,比如生成网站活动等。看起来你应该使用cronjob。你有什么理由不能用这个吗?我相信如果您向您的托管服务提供商解释您需要一个cronjob并向他们展示您将使用它的代码,因为他们将在您的帐户上启用此选项。 (大多数主机应该已启用此功能)
答案 1 :(得分:0)
有几种方法,但没有一种是完美的。
CRONJOBS
你已经指出你不想使用它们。但是如果您对cronjobs的主要关注是crontab管理,那么您可能只需设置一个每分钟一次的PHP cron,然后可能会触发不同分辨率的不同任务。您可以通过PHP完全管理后台服务。主要缺点是您无法平行执行后台任务。
GEARMAN WORKERS
您也可以使用第三方软件,例如Gearman。 Gearman允许您以您喜欢的任何语言编写所谓的工作者(您的后台服务)(支持PHP,以及c ++,java和许多其他语言)。这些工作人员的行为类似于ansychronous函数,可以使用gearman api从代码的任何地方调用它们。您无需携带结果,只需调用该函数即可忘记。它将在后台完成。任务调度也是一种内置的齿轮装置功能。</ p>
您可以使用的另一个软件是Rabbit MQ或任何其他消息总线系统。
本机PHP ASYNC功能
新的PHP7将带来本机php异步编程。您将能够分离PHP脚本和http请求处理,有点像node.js.您的脚本将能够始终工作,以您喜欢的任何方式执行某些后台操作,并处理其他进程中的事件等http请求。如果您可以等到发布日期,这可能是您的最佳选择。
我的答案仅涵盖我个人使用的解决方案。可能还有其他方法可以达到目标,所以继续搜索!