redis - 一个领券的队列问题
伊谢尔伦
伊谢尔伦 2017-04-28 09:04:36
0
5
829

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

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

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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(5)
曾经蜡笔没有小新

https://redis.io/topics/pubsub

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

いいねを押す +0
某草草

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

いいねを押す +0
过去多啦不再A梦

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

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

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

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

    最善の方法は、非同期リクエストを同期リクエストに変更することです
  1. それ以外の場合は、リクエストの処理結果をハッシュ (id-> result) に入れることを検討できます
いいねを押す +0
小葫芦

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

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

リーリー

SSEリンクSSE

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

いいねを押す +0
PHPzhong

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

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