mysql - PHP でスケジュールされた通知と時間通りのリリースを行うにはどうすればよいですか?
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-24 11:33:02
0
9
868

要件/シナリオ:

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

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

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

……

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

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

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

ありがとう^_^

曾经蜡笔没有小新
曾经蜡笔没有小新

全員に返信(9)
仅有的幸福

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

遅延タスクの実装方法

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

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

  3. 豆の木

いいねを押す +0
曾经蜡笔没有小新

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

いいねを押す +0
阿神

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

いいねを押す +0
伊谢尔伦

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

いいねを押す +0
巴扎黑

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

いいねを押す +0
習慣沉默

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

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

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

いいねを押す +0
phpcn_u1582

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

いいねを押す +0
phpcn_u1582

リーリー

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

いいねを押す +0
刘奇

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート