ホームページ  >  に質問  >  本文

mysql - PHP でスケジュールされた通知と時間通りのリリースを行うにはどうすればよいですか?

要件/シナリオ:

  1. たとえば、2018-5-22 13:51:16 に記事を公開するように設定します。

  2. 3 日以内にご連絡ください。

  3. メッセージは有効期限が切れると自動的に削除されます。

……

このような要求を待って、ある時点で自動的に何かを行うというものですが、これはキューとは関係ないようですが、ミドルウェアか何かが必要なのか、あるいは常駐プロセスなどが必要なのでしょうか。

実行すべきタスクをテーブルに行ごとに配置し、プロセスを継続的に更新し、時間ノードに一致したタスクを取り出して実行するという理解ですが、このような考えでしょうか?

このシナリオの成熟したソリューションが何で構成されているか知りたいですか?

ありがとう^_^

曾经蜡笔没有小新曾经蜡笔没有小新2704日前841

全員に返信(9)返信します

  • 仅有的幸福

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

    遅延タスクを使用する、https://github.com/ouqiang/go...

    遅延タスクの実装方法

    1. 自分で実装するか、タイムホイールまたは小さなルートパイルを使用してください

    2. Redis キースペース通知を使用する

    3. 豆の木

    返事
    0
  • 曾经蜡笔没有小新

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

    ポスターの主なものは、遅延メッセージ キュー サービスである DelayQueue です。具体的なシナリオについては、
    1. タオバオの自動注文キャンセルサービス
    2. Ele.meの注文SMS通知サービスなどを参照してください。
    待機/通知メソッドに基づいてタイマーを実装します。

    返事
    0
  • 阿神

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

    プログラムを使ってブラッシングを続けるだけ = =

    返事
    0
  • 伊谢尔伦

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

    それを解決するには、crontab のスケジュールされたタスクを使用できます。また、Php インターフェイスを毎日、毎時、毎分呼び出されるように設計できます。

    返事
    0
  • 巴扎黑

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

    時間フィールドを追加し、モデルレイヤーで適切な判断を下します

    返事
    0
  • 習慣沉默

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

    プログラムのブラッシングですが、データベースの負荷を考慮する必要があります。
    すべてのタスクをキューにプッシュし、無限ループでスクリプトをキューから取り出し、時点を比較し、タスクが到着したら実行モジュールにタスクをスローできます。時間が経過していない場合は、反対側に進んで列に並びます。

    2つの行列。たとえば、実行するキュー:tasteList、すぐに実行するキュー:runList。
    タスクの取得とタスクの実行を別のプロセスに分割します。
    1. タスクの取得: スクリプトはループ内のtasteListからタスクをポップし、時点を決定し、時間が経過するとタスクをrunListキューにプッシュします。ポイントより小さい場合は、tasteList へのプッシュを続けます。
    2. タスクを実行します。runList をループしてポップし、タスクが存在するとすぐに実行します。

    ボリュームが大きい場合は、必要に応じていくつかのプロセスを開くだけでよく、実行を繰り返すことを考える必要はありません。

    返事
    0
  • phpcn_u1582

    phpcn_u15822017-05-24 11:35:02

    システムのスケジュールされたタスク機能を使用してスクリプトをトリガーするだけです。スクリプトが何を行うか、そしてそれをどのように実行するかを決定することもできます。上記の回答を参照することもできます。
    一般的には、高頻度のスクリプトで十分です (たとえば、1 分に 1 回、または 5 分に 1 回)。スクリプト内で時間が判断され、異なる頻度のタスクが呼び出されます。これは、設定するよりも管理がはるかに簡単です。タスクは頻度ごとに個別にスケジュールされます。

    返事
    0
  • phpcn_u1582

    phpcn_u15822017-05-24 11:35:02

    リーリー

    またはworkerman swooleスケジュールタスク機能を使用します

    返事
    0
  • 怪我咯

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

    つまり、データを保存してから、それを継続的に検出するスクリプトを作成します。 。たとえば、1分に1回テストします

    返事
    0
  • キャンセル返事