検索

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

redis - 一个领券的队列问题

用户在领券页面点击领取后,调用后台服务接口A,接口A将该领取操作写入队列:

// 写入队列
addQue(....)

然后呢,写入队列后紧接着循环读取队列吗?用户还在那等着是否领取成功的结果。

伊谢尔伦伊谢尔伦2856日前894

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

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-04-28 09:06:36

    https://redis.io/topics/pubsub

    redis はパブリッシュ/サブスクライブをサポートします

    返事
    0
  • 某草草

    某草草2017-04-28 09:06:36

    私が知っているのは、最終結果を得るには、クーポン収集の成功ページでアンケートを実行する (または、より良いエクスペリエンスを得るために Redis pubsub で WebSocket を使用する) ことです。

    返事
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-04-28 09:06:36

    製品要件は同期的 (結果は同期的に返されます) であり、キューは主に注文、通知などの非同期実装を実現するために使用されます。
    本当にキューを使用して同期結果をシミュレートしたい場合は、クーポン結果を個別に取得することしかできません。

    「Redis はパブリッシュ/サブスクライブをサポートしています」: このモデルの使用にはいくつかの問題があります

    1. 定義する必要があるチャネルが多すぎるため、1 つのチャネルを再利用すると、加入者は多くのメッセージをフィルタリングする必要があり、テキスト プロトコルが必要になります (パブリッシュはテキストのみをサポートします)。

    2. サービスにリクエストを送信後、返信が来る前にサービスが切れてしまうとクーポン情報が失われます
    3. 提案は次のとおりです:

      最善の方法は、非同期リクエストを同期リクエストに変更することです
    1. それ以外の場合は、リクエストの処理結果をハッシュ (id-> result) に入れることを検討できます
    2. 返事
      0
  • 高洛峰

    高洛峰2017-04-28 09:06:36

    それが非同期であり、コレクション結果がコレクションリクエストを通じて返されない場合、上記のように ajax を使用してコレクション結果を取得すると、ループ内でリクエストを開始するのに ajax は必要ありません。これは、いつ発生するかわからないためです。ポーリングが関与する限り、ポーリング間隔が短すぎると、サーバーに大きな負荷がかかります。ポーリング間隔が長すぎると、問題が発生します。結果の通知と受け取りが遅れる。

    同期を行いたくない場合は、WebSocket を使用すると、両者がいつでも遅延なく通信し、データを交換できます。
    または、SSE (サーバー送信イベント) を使用して直接プッシュします。WebSocket は双方向であり、SSE は一方向であり、メッセージのプッシュにはこれで十分です。

    リーリー

    SSEリンクSSE

    サーバーの内部動作プロセスに関しては、途中にキャッシュやmqの層を追加すれば、非同期動作を実現できます。たとえば、zmq、redis pub/sub などです。

    返事
    0
  • PHPz

    PHPz2017-04-28 09:06:36

    知識を求めています。 。 。 。

    返事
    0
  • キャンセル返事