suchen

Heim  >  Fragen und Antworten  >  Hauptteil

mysql - Wie kann ich in PHP eine geplante Benachrichtigung und Veröffentlichung rechtzeitig durchführen?

Anforderungen/Szenarien:

  1. Legen Sie beispielsweise einen Artikel fest, der am 22.05.2018 um 13:51:16 Uhr veröffentlicht werden soll.

  2. Benachrichtigen Sie mich in drei Tagen.

  3. 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^_^

曾经蜡笔没有小新曾经蜡笔没有小新2742 Tage vor871

Antworte allen(9)Ich werde antworten

  • 仅有的幸福

    仅有的幸福2017-05-24 11:35:02

    用延时任务, https://github.com/ouqiang/go...

    延时任务实现方式

    1. 自己实现, 用时间轮或小根堆

    2. 用redis键空间通知

    3. beanstalkd

    Antwort
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-24 11:35:02

    楼主要的应该是DelayQueue,即延迟消息队列服务。具体场景可以参考:
    1.淘宝的自动取消订单业务
    2.饿了么下单短信通知业务等等。
    基于wait/notify的方式把Timer实现。

    Antwort
    0
  • 阿神

    阿神2017-05-24 11:35:02

    就是用程序不断去刷的= =

    Antwort
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-24 11:35:02

    可以使用crontab定时任务来解决,可以来设计每天、小时、分调用Php接口。

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-05-24 11:35:02

    加个时间字段,然后在模型层做相关判断

    Antwort
    0
  • 習慣沉默

    習慣沉默2017-05-24 11:35:02

    程序刷,但是要考虑数据库压力。
    可以把任务都压到队列去,脚本死循环从队列拿出来,比较时间点,到了就把任务丢给执行模块。时间点没到的就继续另一边压入队列中。

    两个队列。比如 待执行队列:tastList; 立即执行队列:runList。
    把取任务和执行任务分不同进程:
    1、取任务:脚本循环从tastList中pop任务,判断时间点,到点了把这个任务push到runList队列中去。不到点的继续压入到tastList中去;
    2、执行任务:循环冲runList中去pop,一有任务就马上执行。

    量大的时候,自己根据需要去到开几个进程就了,也不用考虑说会重复执行。

    Antwort
    0
  • phpcn_u1582

    phpcn_u15822017-05-24 11:35:02

    用系统的定时任务功能触发一个脚本就行了。具体脚本干什么,怎么干可以自己随便啦,参考上面的回答也可以。
    一般来说一个高频脚本就够了(比如1分钟一次或者5分钟一次),脚本内再去判断时间然后调用不同频率的任务,这样比每种频率的脚本分别建立定时任务好管理的多。

    Antwort
    0
  • phpcn_u1582

    phpcn_u15822017-05-24 11:35:02

    websocket 

    或者用workerman swoole定时任务功能

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-24 11:35:02

    就是你把数据存起来,然后弄个脚本一直去检测。。比如1分钟检测一次

    Antwort
    0
  • StornierenAntwort