mysql - PHP定时通知、按时发布怎么做?
问题描述
需求/场景:
比如设置一篇文章2018-5-22 13:51:16发布。
三天后通知我。
消息过期后自动删除。
……
等等这种需求,就是自动到了一个时间点就做某事,这个跟队列好像没什么关系感觉,是不是要什么中间件之类的时间,或是常驻进程之类的。
我的理解是,把待做的任务放到一行一行的一个表里面,然后一个进程不断的去刷,满足时间节点的任务就拿出来执行,是这样的思路吗。
想知道这种场景成熟的解决方案是用什么做的?
谢谢^_^
问题解答
回答1:用延时任务, https://github.com/ouqiang/go...
延时任务实现方式自己实现, 用时间轮或小根堆
用redis键空间通知
beanstalkd
回答2:楼主要的应该是DelayQueue,即延迟消息队列服务。具体场景可以参考:1.淘宝的自动取消订单业务2.饿了么下单短信通知业务等等。基于wait/notify的方式把Timer实现。
回答3:就是用程序不断去刷的= =
回答4:可以使用crontab定时任务来解决,可以来设计每天、小时、分调用Php接口。
回答5:加个时间字段,然后在模型层做相关判断
回答6:程序刷,但是要考虑数据库压力。可以把任务都压到队列去,脚本死循环从队列拿出来,比较时间点,到了就把任务丢给执行模块。时间点没到的就继续另一边压入队列中。
两个队列。比如 待执行队列:tastList; 立即执行队列:runList。把取任务和执行任务分不同进程:1、取任务:脚本循环从tastList中pop任务,判断时间点,到点了把这个任务push到runList队列中去。不到点的继续压入到tastList中去;2、执行任务:循环冲runList中去pop,一有任务就马上执行。
量大的时候,自己根据需要去到开几个进程就了,也不用考虑说会重复执行。
回答7:用系统的定时任务功能触发一个脚本就行了。具体脚本干什么,怎么干可以自己随便啦,参考上面的回答也可以。一般来说一个高频脚本就够了(比如1分钟一次或者5分钟一次),脚本内再去判断时间然后调用不同频率的任务,这样比每种频率的脚本分别建立定时任务好管理的多。
回答8:websocket
或者用workerman swoole定时任务功能
回答9:就是你把数据存起来,然后弄个脚本一直去检测。。比如1分钟检测一次
相关文章:
1. python - Pycharm调试代码进行列表遍历时,如何直接赋值指定元素2. atom编译器 如何格式化前端代码文件?3. angular.js - ng-repeat的数据排序,我用了orderBy: d.supportNum为什么失效?4. angular.js - Angular1使用bootstrap轮播条carousel不能自动轮播5. python - 基于scrapy-redis的分布式爬虫运行的时候不能正常运行 遇到的问题如下截图所示6. css3 - 我的css用less写的,eclipse的jsp文件要修改css很麻烦,怎么解决?7. android - 新建项目卡在Gradle:Resolvedependencies’:app:_debugCompile’8. javascript - webpack热加载配置不生效9. angular.js - 焦虑!angular的ng-options的问题10. Android Studio 中程序添加不上Xutils 3.0 jar包