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

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 10
2年前 评论
poker_face (楼主) 2年前
ysnow (作者) 2年前

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

2年前 评论

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

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

2年前 评论

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

2年前 评论

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

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

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

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

2年前 评论

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

2年前 评论