2016-08-26 3 views
0

Ich verwende die Java-Bibliothek Jedis ontop einer Redis-Warteschlange, die ich als Producer/Consumer-Warteschlange verwende. Es war einfach einzurichten und funktioniert gut.Jedis als Leistung der Nachrichtenwarteschlange

Consumer Code unten

List<String> messages = jedis.blpop(0, redisQueueName); 
String message = messages.get(1); 
//do some stuff 

Ich bin auf der Suche, um zu sehen, ob ich die Leistung beschleunigen kann, wie ich eine große Menge an Produkten habe in der Redis Warteschlange sitzen, abgeholt zu werden. Ich habe meinen benutzerdefinierten Verarbeitungscode zeitlich abgestimmt und es dauert nicht lange (20000 Nanosekunden).

Wäre es empfehlenswert, mehrere Artikel gleichzeitig aus Redis zu ziehen und in einem Stapel zu verarbeiten? Oder sollte ich besser den Redis-Server für bessere Leistung optimieren?

+0

Ihr Problem könnte in der Tat mit Redis in IO sein als bei der Verarbeitung - ich würde sie in Stapeln greifen; ohne irgendeine Art von Transaktion können Sie trotzdem Nachrichten verlieren; Die Tatsache, dass Sie Redis verwenden, deutet darauf hin, dass dies kein Problem für Sie ist. –

Antwort

0

Ja, Batch zu ziehen ist in der Tat die beste Praxis. Sie werden Netzwerk-Hin- und Rückfahrt vermeiden.

Noch eine Sache ist es, die Warteschlange zu trimmen, wenn sie einen bestimmten Bereich überschreitet, da die Warteschlange schnell wächst und Sie die Kontrolle über die Größe der Warteschlange (Speichergröße) haben wollen. Manchmal müssen Sie möglicherweise nicht jeden einzelnen Eintrag in der Warteschlange ausführen, stattdessen können Sie wenige überspringen, wenn die Warteschlangengröße zunimmt.

Wenn Sie erste Elemente beibehalten möchten eingetragen, dh., Für ersten 100 Elemente, die Sie tun können,

Ltrim queue 0 100 

beizubehalten letzten 100 Elemente allein Halte

Ltrim queue -1 100 

this helps