2011-10-05 17 views
17

Webアプリケーションで、イベントをキューに書き込む必要がある場合は、イベントを書き込むためにredisに接続します。redis pub/subモデルはredisへの永続的な接続が必要ですか?

他のバックエンドプロセス(デーモンやcronジョブなど)がredisでイベントを処理したり反応したりするようにするには、持続的な接続が必要ですか?

このpub/subプロセスがWebアプリケーションでどのように動作するかについて、混乱はほとんどありません。

+0

RedisでネイティブにPubSubの永続性を追加する簡単な(1行のパッチ)アイディア - http://abhinavsingh.com/customizing-redis-pubsub-for-message-persistence-part-2/ –

答えて

2

私は完全にはわかりませんが、はい、pub/subには永続的な接続が必要です。

代わりに私はresqueを見て、どのようにそれを処理しますか。 pub/subを使うのではなく、単にredisでリストに項目を追加するだけです。そして、あなたが持っているデーモンやcronジョブがあれば、lpopコマンドを使って最初のものを得ることができます。

申し訳ありませんが擬似回答とその後のプラグインを与えるだけです。

42

の使用BLPOPは、基本的にはRedisのであっ二つの異なるメッセージングモデルです:

  • 火災は、多くの/ワンを忘れ:パブ/サブ。メッセージが発行された時点で、すべてのサブスクライバがそれを受信しますが、このメッセージは永久に失われます。クライアントが購読されていない場合、それを取り戻す方法はありません。
  • Persisting Queues/One to One:リスト、BLPOPなどのブロックコマンドで使用される可能性があります。リストを使用すると、プロデューサがリストにプッシュし、1人または複数のコンシューマが要素を待機していますが、のメッセージは待機中のクライアントのうちの1つにのみ届きます。リストでは永続性があり、メッセージはクライアントが消えるのではなくポップするのを待ちます。だから誰も聞いていなくても、バックログ(利用可能なメモリと同じくらい大きいか、LTRIMを使ってバックログを制限することができます)があります。

これは明らかです。

  • はこのためにPSUBSCRIBE
  • ドク、SUBSCRIBE、PUBLISH BRPOP/BLPOP、RPOP/LPOP、

    • LPUSH/RPUSHを:私はあなたがRedisのメッセージングのセマンティクスについての詳細を理解するには、次のコマンドを研究提案しますコマンドはredis.ioで入手できます

    +0

    私はサブスクライバとして永続的な接続が必要ですか? – codecompleting

    +5

    Pub/Subで、はい。例は[this](http://blog.joshsoftware.com/2011/01/03/do-you-need-a-push-notification-manager-redis-pubsub-to-the-rescue/)を見てください。 Pub/SubとカスタムRubyクライアントを使用して永続メッセージを実現する方法について説明します。 – cbrauchli

    関連する問題