Redis Pubsub et le Message Queueing

Ma question est: Utilisation de Redis pour PubSub, qu'advient-il des messages quand les éditeurs envoient des messages dans un canal plus vite que les abonnés sont en mesure de les lire?

Par exemple, disons que j'ai:

  • Un simple éditeur de la publication des messages au taux de 2 msg/sec.
  • Un simple abonné à la lecture des messages au taux de 1 msg/sec.

Mon hypothèse naïve serait l'abonné ne pourrait voir que 50% des messages publiés sur le Redis. Pour tester cette théorie, j'ai écrit deux scripts:

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)

Résultats

  • Quand j'ai couru sub.py d'abord, immédiatement suivie par pub.py, j'ai trouvé que sub.py affiche tous les messages (1-10), l'un après l'autre avec un délai de 1 seconde entre les deux. Mon hypothèse de départ était fausse, Redis est de files d'attente de messages. Plus de tests nécessaires.
  • Quand j'ai couru pub.py d'abord, puis attendu 5 secondes avant d'exécuter sub.py, j'ai trouvé que sub.py ne s'affiche de la deuxième moitié des messages (5-10). J'aurais cru au départ, mais compte tenu de mes résultats précédents, j'aurais pensé que les messages ont été mis en file d'attente, ce qui m'a amené à la conclusion suivante...

Conclusions

  • Redis serveur apparaît à la file d'attente de messages pour chaque client, pour chaque canal.
  • Aussi longtemps que le client est à l'écoute, il n'a pas d'importance à quelle vitesse il lit les messages. Tant qu'il est connecté, les messages restent en file d'attente pour le client, pour ce canal.

Autres Questions

  • Ces conclusions sont-elles valides?
  • Si oui, combien de temps un client/canal de messages sont restés en file d'attente?
  • Si oui, est-il redis-cli info de commande pour voir combien de messages sont mis en file d'attente (pour chaque client/canal)?