0

顧客はショッピングカートに行きます。Shoppingcartは、外部サービスによって支払われる必要があるため、DBに追加されます。5分後にショッピングカートをどのように削除しますか?

「注文は5分でリセットされます」と出力し、5分間sleep()するスクリプトにajaxリクエストを送信してから、注文をキャンセルすることを考えました。

もっと良い方法はありますか?確かに、5分ごとにcronを実行するよりも優れています。

4

4 に答える 4

2

実行時間の長いスクリプトに ajax リクエストを送信することは、悪い考えのように思えます。多くのスリープ状態のスクリプトが実行されることになり、サーバーが詰まる可能性があります。

cron ジョブはそれほど悪い考えではありません。データベースを定期的に実行して、期限切れのショッピング カートを探します。

有効期限クエリが迅速な場合、より頻繁に実行できます。たとえば、誰かがカートに何かを追加したときや、誰かがチェックアウトを試みたときなどです。

別の方法は、期限切れのバスケットをデータベースに置いたままにしておくことです。ユーザーがチェックアウトしようとすると、その時点で有効期限を確認し、有効期限が切れていることをユーザーに知らせて削除します。ユーザーが戻ってこないために削除されない期限切れのバスケットは、毎日/毎週の片付けジョブで削除できます。

于 2013-03-15T15:36:20.907 に答える
1
  1. まず、常に何が起こっているかをユーザーに知らせるため、「注文は 5 分後にリセットされます」と印刷することをお勧めします。
  2. それを行うより良い方法は、5分で期限切れになるCookieを設定することだと思います
  3. 次に... Cookieの有効期限が切れた場合/場合、注文をキャンセルするビジネスはありますか:)

それが役立つことを願っています!

于 2013-03-15T15:36:49.923 に答える
1

PHP プロセスを待機させておくのは非常に悪い考えです... システム リソースを大量に消費し、スケーラブルではありません。

cron ジョブを実装するにはもう少し手間がかかるかもしれませんが、長期的には役に立ちます。

于 2013-03-15T15:37:20.737 に答える
1

私がすることはexpire_time、データベース行に設定することです。そして、次のリクエストがその時間を過ぎた場合。それ以降にバスケットに戻った場合は、バスケットを削除してください。

他に何もない場合は、その cron を実行して、毎日かそこら放棄されたバスケットをクリーンアップします。

于 2013-03-15T15:37:58.020 に答える