sql >> Databasteknik >  >> NoSQL >> Redis

Redis Pub/Sub med tillförlitlighet

När en abonnent (konsument) dör kommer din lista att fortsätta att växa tills kunden kommer tillbaka. Din producent kan trimma listan (från båda sidor) när den når en specifik gräns, men det är något du skulle behöva hantera på applikationsnivå. Om du inkluderar en tidsstämpel i varje meddelande, kan din konsument sedan agera på meddelandets ålder, förutsatt att du har applikationslogik som du vill tillämpa på meddelandeåldern.

Jag är inte säker på hur ett felaktigt meddelande skulle komma in i systemet, eftersom anslutningen till Redis vanligtvis är TCP med dess integritetsgarantier. Men om detta händer, kanske på grund av en bugg i meddelandekodningen i producentlagret, kan du tillhandahålla en allmän mekanism för att hantera fel genom att hålla en kö per producent som tog emot konsumenternas undantagsmeddelanden.

Policyer för att försöka igen beror mycket på dina programbehov. Om du behöver 100 % försäkran om att ett meddelande har tagits emot och behandlats, bör du överväga att använda Redis-transaktioner (MULTI/EXEC) för att avsluta arbetet som utförs av en konsument, så att du kan säkerställa att en klient inte tar bort ett meddelande om inte den har avslutat sitt arbete. Om du behöver uttrycklig bekräftelse kan du använda ett explicit ACK-meddelande i en kö som är dedikerad till producentprocessen.

Utan att veta mer om dina applikationsbehov är det svårt att veta hur man väljer klokt. I allmänhet, om dina meddelanden kräver fullt ACID-skydd, måste du förmodligen också använda redis-transaktioner. Om dina meddelanden bara är meningsfulla när de kommer i tid, kanske transaktioner inte behövs. Det låter som om du inte kan tolerera tappade meddelanden, så ditt sätt att använda en lista är bra. Om du behöver implementera en prioritetskö för dina meddelanden kan du använda den sorterade uppsättningen (Z-kommandona) för att lagra dina meddelanden, med deras prioritet som poängvärde, tillsammans med en pollingkonsument.



  1. Bulk intag i Redis

  2. Spring Boot redis Template autokabelkoppling misslyckades

  3. Mongoose-schemareferens och odefinierad typ 'ObjectID'

  4. MongoDB - Index används inte vid sortering och begränsning av avståndsfråga