Redisは、配送が保証された送信者/受信者モデルを許可するBRPOPを提供します。2人のクライアントが同時にRedisに値が存在するのを待つべきですか?
送信者:LPUSH foo_key bar_value
受信機:BRPOP foo_key ###
=> 'bar_value'
###は間隔を任意の有効期限が切れている場合は、15秒と言います。
ただし、メッセージの受信者が2つある場合はどうすればよいですか。私は、次のオプションについて考えてきました:
- /をPUBLISHはをSUBSCRIBEが、受信機がチャネルに秒SUBSCRIBE前に、送信者が ESメッセージを公開する場合、これは競合状態につながります。
- 送信者は、値が存在するまでSET +キーでを期限切れにし、受信機のポーリングキーを呼び出し、その後、 sの値を取得します。データは最終的にEXPIREタイムアウトに基づいて削除されます。私はこのオプションが気に入らないのは、多くのクライアントが同時にそれをやっていると、レディスをポーリングするとパフォーマンスが低下する可能性があり、レスポンスはリアルタイムではないからです。
リアルタイムで保証された配信でマルチクライアント受信機モデルを設定するにはどうすればよいですか?
スキーマ内の特定のキーに対して1つのメッセージしか送信されないため、クライアントが誤って同じメッセージを2回受信する危険性はありません。
あなたは受信者がプッシュするリストの名前、あなたは同じ 'foo_key'を意味すると思います。その場合、タイムアウト前にジョブが終了して「BRPOPLPUSH」に戻ると、受信者は値の処理を複数回終了する可能性があります。 –
ありがとう、私は投稿を編集しました。それは 'BRPOPLPUSH foo_key foo_key ###' – sffc
でなければなりません。異なるリスナーに異なるキューを使用し、必要に応じてすべて/一部/複数にプッシュします。 –