Heim > Fragen und Antworten > Hauptteil
Anforderungen/Szenarien:
Legen Sie beispielsweise einen Artikel fest, der am 22.05.2018 um 13:51:16 Uhr veröffentlicht werden soll.
Benachrichtigen Sie mich in drei Tagen.
Nachrichten werden nach Ablauf automatisch gelöscht.
……
Warten Sie, diese Art von Anforderung besteht darin, zu einem bestimmten Zeitpunkt etwas automatisch zu tun. Dies scheint nichts mit der Warteschlange zu tun zu haben. Erfordert es irgendeine Middleware oder andere Zeit, oder einen residenten Prozess oder so.
Mein Verständnis ist, dass die zu erledigenden Aufgaben Zeile für Zeile in einer Tabelle platziert werden und dann ein Prozess kontinuierlich aktualisiert wird. Die Aufgaben, die den Zeitknoten erfüllen, werden herausgenommen und ausgeführt.
Möchten Sie wissen, woraus die ausgereifte Lösung für dieses Szenario besteht?
Danke^_^
仅有的幸福2017-05-24 11:35:02
用延时任务, https://github.com/ouqiang/go...
自己实现, 用时间轮或小根堆
用redis键空间通知
beanstalkd
曾经蜡笔没有小新2017-05-24 11:35:02
楼主要的应该是DelayQueue,即延迟消息队列服务。具体场景可以参考:
1.淘宝的自动取消订单业务
2.饿了么下单短信通知业务等等。
基于wait/notify的方式把Timer实现。
習慣沉默2017-05-24 11:35:02
程序刷,但是要考虑数据库压力。
可以把任务都压到队列去,脚本死循环从队列拿出来,比较时间点,到了就把任务丢给执行模块。时间点没到的就继续另一边压入队列中。
两个队列。比如 待执行队列:tastList; 立即执行队列:runList。
把取任务和执行任务分不同进程:
1、取任务:脚本循环从tastList中pop任务,判断时间点,到点了把这个任务push到runList队列中去。不到点的继续压入到tastList中去;
2、执行任务:循环冲runList中去pop,一有任务就马上执行。
量大的时候,自己根据需要去到开几个进程就了,也不用考虑说会重复执行。
phpcn_u15822017-05-24 11:35:02
用系统的定时任务功能触发一个脚本就行了。具体脚本干什么,怎么干可以自己随便啦,参考上面的回答也可以。
一般来说一个高频脚本就够了(比如1分钟一次或者5分钟一次),脚本内再去判断时间然后调用不同频率的任务,这样比每种频率的脚本分别建立定时任务好管理的多。