顧客はショッピングカートに行きます。Shoppingcartは、外部サービスによって支払われる必要があるため、DBに追加されます。5分後にショッピングカートをどのように削除しますか?
「注文は5分でリセットされます」と出力し、5分間sleep()するスクリプトにajaxリクエストを送信してから、注文をキャンセルすることを考えました。
もっと良い方法はありますか?確かに、5分ごとにcronを実行するよりも優れています。
顧客はショッピングカートに行きます。Shoppingcartは、外部サービスによって支払われる必要があるため、DBに追加されます。5分後にショッピングカートをどのように削除しますか?
「注文は5分でリセットされます」と出力し、5分間sleep()するスクリプトにajaxリクエストを送信してから、注文をキャンセルすることを考えました。
もっと良い方法はありますか?確かに、5分ごとにcronを実行するよりも優れています。
実行時間の長いスクリプトに ajax リクエストを送信することは、悪い考えのように思えます。多くのスリープ状態のスクリプトが実行されることになり、サーバーが詰まる可能性があります。
cron ジョブはそれほど悪い考えではありません。データベースを定期的に実行して、期限切れのショッピング カートを探します。
有効期限クエリが迅速な場合、より頻繁に実行できます。たとえば、誰かがカートに何かを追加したときや、誰かがチェックアウトを試みたときなどです。
別の方法は、期限切れのバスケットをデータベースに置いたままにしておくことです。ユーザーがチェックアウトしようとすると、その時点で有効期限を確認し、有効期限が切れていることをユーザーに知らせて削除します。ユーザーが戻ってこないために削除されない期限切れのバスケットは、毎日/毎週の片付けジョブで削除できます。
それが役立つことを願っています!
PHP プロセスを待機させておくのは非常に悪い考えです... システム リソースを大量に消費し、スケーラブルではありません。
cron ジョブを実装するにはもう少し手間がかかるかもしれませんが、長期的には役に立ちます。
私がすることはexpire_time
、データベース行に設定することです。そして、次のリクエストがその時間を過ぎた場合。それ以降にバスケットに戻った場合は、バスケットを削除してください。
他に何もない場合は、その cron を実行して、毎日かそこら放棄されたバスケットをクリーンアップします。