sql >> データベース >  >> NoSQL >> Redis

Laravelでジョブをキャンセルする

    それを行うための直接または簡単な方法はありません。遅延したジョブはsorted setsに保持されます scoreとしての処理時間 valueとしてのジョブペイロード 。

    ソートされたセットから要素を削除する方法はいくつかあります(それらのほとんどは、遅延キューのサイズに応じていくつかの作業が必要です)

    • ディスパッチされたジョブの「正確な」ペイロードを取得し、ZREMを使用してそれを削除します。オブジェクト(すべてのパラメーターを含むジョブのシリアル化されたバージョン)は巨大になる可能性があり、一意の識別子があるため「正確な」ジョブを作成できないため、困難です。あなたはZRANGEBYSCOREとWITHSCORESでそれのリストを得ることができます 。それはあなたに彼らのスコアで仕事のリストを与えるでしょう。スコアを使用して、遅延ジョブを識別することができます。値(シリアル化されたペイロード)を取得してから、ZREMを使用します 。
    • 特定の時間に処理されるジョブが1つしかない場合は、処理された時間を使用してZREMRANGEBYSCOREを使用できます。その時点で正確に処理されるジョブがn個ある場合は、ZREMRANGEBYSCORE以降、他のジョブも削除できます。 時間間隔がかかります。
    • ZSCANを使用して遅延リスト全体を(ページ付けを使用して)スキャンし、ジョブのスコアと識別子を見つけてから、識別子とともにZREMRANGEBYLEXを使用して削除することができます。
    • 別の方法として、handleの先頭にキャンセル条件を設定することができます。 方法。これには、アプリケーション層の開発が必要です。ジョブをキューにプッシュするときはいつでも、識別子をジョブに送信し、同じ識別子(理解できる)をRedisにも入れます(EXPIREを使用) 遅延時間よりも大きい)。キャンセルしたい場合は、Redisから削除してください。 handleメソッド内で、指定された識別子がRedisに存在するかどうかを確認します。存在しない場合は、コードブロックから早期に戻ります。



    1. java.lang.IncompatibleClassChangeError:クラスMongoの実装

    2. SidekiqでRedis6のTLSを有効にする方法は?

    3. MapReduceの結果は100に制限されているようですか?

    4. Redisのフィルタリング要素