sql >> Database >  >> NoSQL >> Redis

Redis Pub/Sub met betrouwbaarheid

Wanneer een abonnee (consument) overlijdt, zal uw lijst blijven groeien totdat de klant terugkeert. Uw producent zou de lijst (van beide kanten) kunnen bijsnijden zodra deze een specifieke limiet heeft bereikt, maar dat is iets dat u op toepassingsniveau moet regelen. Als u in elk bericht een tijdstempel opneemt, kan uw consument reageren op de leeftijd van een bericht, ervan uitgaande dat u toepassingslogica heeft die u wilt afdwingen op de leeftijd van het bericht.

Ik weet niet zeker hoe een misvormd bericht het systeem zou binnenkomen, aangezien de verbinding met Redis meestal TCP is met zijn integriteitsgaranties. Maar als dit gebeurt, misschien als gevolg van een fout in de berichtcodering op de producentlaag, kunt u een algemeen mechanisme bieden voor het afhandelen van fouten door een wachtrij per producent aan te houden die uitzonderingsberichten van de consument heeft ontvangen.

Het beleid voor opnieuw proberen is sterk afhankelijk van uw toepassingsbehoeften. Als u 100% zekerheid wilt dat een bericht is ontvangen en verwerkt, kunt u overwegen om Redis-transacties (MULTI/EXEC) te gebruiken om het werk van een consument af te ronden, zodat u zeker weet dat een klant een bericht niet verwijdert, tenzij het heeft zijn werk voltooid. Als je expliciete bevestiging nodig hebt, kun je een expliciet ACK-bericht gebruiken in een wachtrij die is bedoeld voor het (de) productieproces(sen).

Zonder meer te weten over uw toepassingsbehoeften, is het moeilijk om verstandig te kiezen. Als uw berichten volledige ACID-bescherming vereisen, moet u over het algemeen ook redis-transacties gebruiken. Als uw berichten alleen zinvol zijn als ze op tijd zijn, zijn transacties mogelijk niet nodig. Het klinkt alsof je geen verwijderde berichten kunt tolereren, dus je benadering van het gebruik van een lijst is goed. Als u een prioriteitswachtrij voor uw berichten moet implementeren, kunt u de gesorteerde set (de Z-commando's) gebruiken om uw berichten op te slaan, waarbij u hun prioriteit als scorewaarde gebruikt, samen met een pollingconsument.



  1. Test lege string in mongodb en pymongo

  2. Redis Poplijstitem Op aantal items

  3. Zoek een document met ObjectID in mongoDB

  4. Hoe zoek ik naar een object op zijn ObjectId in de mongo-console?