私の全体的な質問です:PubSubのためのRedisを使用して、出版社が速く、加入者がそれらを読むことができるよりもチャネルにメッセージをプッシュするときにメッセージに何が起こりますか?例えばRedisのPubSubのメッセージキュー
、のは、私が持っているとしましょう:
- 2 MSG /秒の速度でメッセージを公開シンプルな出版社。
- 1つのMSG /秒の速度でメッセージを読む簡単加入。
私の前提は、サブスクライバはRedisに公開されたメッセージの50%しか見ることができないということです。
pub.py
queue = redis.StrictRedis(host='localhost', port=6379, db=0)
channel = queue.pubsub()
for i in range(10):
queue.publish("test", i)
time.sleep(0.5)
sub.py
r = redis.StrictRedis(host='localhost', port=6379, db=0)
p = r.pubsub()
p.subscribe('test')
while True:
message = p.get_message()
if message:
print "Subscriber: %s" % message['data']
time.sleep(1)
結果
- 私は走った:この理論をテストするために、私は2つのスクリプトを書きました
sub.py
まず、直ちにpub.py
続いて、私はsub.py
が実際にすべてのメッセージ(1-10)との間に1秒の遅延で次々に表示することを見出しました。私の初期の仮定は間違っていた、Redisはメッセージをキューに入れている。より多くのテストが必要です。 - 最初に
pub.py
を実行してから、sub.py
を実行する前に5秒待ってから、sub.py
にはメッセージの後半(5-10)しか表示されませんでした。私はもともとこれを想定しているだろうが、私の以前の結果を考えると、私は- のRedisサーバがに表示されます
結論...以下の結論に私を導いた、メッセージがキューに入れられたと思っているだろう各クライアントのキューメッセージを各チャネルごとに格納します。
- 限り、クライアントが待機しているとして、メッセージを読み込むスピードは重要ではありません。接続されている限り、そのクライアントのメッセージはそのチャネルに対してキューに入れられたままになります。
残りの質問
- は、これらの結論は有効か?
- もしそうなら、クライアント/チャネルメッセージはどれくらいの期間キューに入れられたままですか?
- の場合、クライアント/チャネルごとにキューに登録されているメッセージの数を確認するには、
redis-cli info
コマンドがありますか?
「質問を読むために新しい答えがあります - それをロードするにはここをクリックしてください」 - あなたは私より速く入力し、すばらしい答えを出しました:) –
申し訳ありません:-)私は疑問に動機づけられました! –
非常に良い答え!レディスバッファを完全に無効にし、データが最新のものであることを確実にするために以前のデータをある程度失ったとしても、新しいイベント(例えば証券取引所市場の更新)でのみ実際のデータのみを受け取ることは可能ですか? –