设定一个固定时间点的定时任务怎么样资源消耗比较少?

需求就是用户可以设定一个延时时间(一天到30天不等),最基本的肯定是存数据库/缓存每分钟遍历了,如果间隔比较长的话,感觉太消耗资源了,要么干脆直接编辑crontab文件,又感觉有点low了

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 10
1年前 评论
poker_face (楼主) 1年前
ysnow (作者) 1年前

要没啥能取消的功能可以考虑上延迟队列,但要有的话就轮询数据量小也没啥关系,配合上分块队列也吃不了多少资源,直接crontab也行。

1年前 评论

这个看具体的场景 比如你设置 1天后发送卡券给选中的10个人 10天后给几千人发送营销短信什么的 这种可以定时任务每扫库是否满足规则来做

如果你要做用户自定义周期性定时任务 建议找个定时任务平台来做 比如什么xxx-job啥的

1年前 评论

基本思路是 crontab 每分钟去检查,这里,耗资源不是考虑的事情。但,可以想办法优化效率,如避免每次检查都查库,用户每次添加/修改时,计算最近的任务时间,加入缓存,也就是锁定了下次将要执行任务的时间,未到时间直接返回。先实现,再优化,就算每次查库大不了一分钟一次sql,项目有十几个分钟级的定时任务很正常,没有耗资源一说。

1年前 评论

性能好点的话就swoole定时器吧

把它当扩展用 在里面curl跑你要搞的业务

        //每隔1000ms触发一次
       swoole_timer_tick(1000, function ($timer_id) {
             echo "hello\n";
                });
1年前 评论

redis的有序集合,用计划执行时间做为排序分数,跑个脚本每秒查一次,性能上肯定不用担心,资源消耗也够小

1年前 评论

阿里云MNS: help.aliyun.com/product/27412.html 这个应该可以解决你的问题

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!