设定一个固定时间点的定时任务怎么样资源消耗比较少?
需求就是用户可以设定一个延时时间(一天到30天不等),最基本的肯定是存数据库/缓存每分钟遍历了,如果间隔比较长的话,感觉太消耗资源了,要么干脆直接编辑crontab文件,又感觉有点low了
首选任务调度 任务调度《Laravel 9 中文文档》
redis zset
要没啥能取消的功能可以考虑上延迟队列,但要有的话就轮询数据量小也没啥关系,配合上分块队列也吃不了多少资源,直接crontab也行。
这个看具体的场景 比如你设置 1天后发送卡券给选中的10个人 10天后给几千人发送营销短信什么的 这种可以定时任务每扫库是否满足规则来做
如果你要做用户自定义周期性定时任务 建议找个定时任务平台来做 比如什么xxx-job啥的
基本思路是 crontab 每分钟去检查,这里,耗资源不是考虑的事情。但,可以想办法优化效率,如避免每次检查都查库,用户每次添加/修改时,计算最近的任务时间,加入缓存,也就是锁定了下次将要执行任务的时间,未到时间直接返回。先实现,再优化,就算每次查库大不了一分钟一次sql,项目有十几个分钟级的定时任务很正常,没有耗资源一说。
性能好点的话就swoole定时器吧
把它当扩展用 在里面curl跑你要搞的业务
redis的有序集合,用计划执行时间做为排序分数,跑个脚本每秒查一次,性能上肯定不用担心,资源消耗也够小
阿里云MNS: help.aliyun.com/product/27412.html 这个应该可以解决你的问题