sql >> Database >  >> NoSQL >> Redis

Geeft Stackexchange.Redis' fire and forget garanties voor levering?

Eigenlijk ondersteunt het Redis-protocol niet echt "vuur en vergeet"-bewerkingen. Behalve pub/sub-verkeer, worden alle Redis-commando's gekoppeld aan een antwoord en is er geen manier om de Redis-server te vertellen om het antwoord weg te laten.

Nu simuleren sommige clients (zoals StackExchange.Redis) een "fire and forget"-modus door een asynchrone implementatie van het protocol. Eigenlijk lijkt de "vuur en vergeet"-modus in StackExchange.Redis erg op de "asynchrone" modus, behalve dat de antwoorden gewoon worden weggegooid wanneer ze worden ontvangen.

Is het betrouwbaar? Welnu, het garandeert de levering voor zover TCP/IP de levering garandeert. Het netwerk zal zijn best doen om de pakketten te verzenden (uiteindelijk worden de pakketten opnieuw verzonden als er enkele verloren gaan), maar dit wordt allemaal afgehandeld door TCP.

Als de server nu down is, of besluit de verbinding te verbreken, zal de client dit alleen weten wanneer hij probeert te lezen van de socket. StackExchange.Redis kan graag een tijdje doorgaan met het verzenden van opdrachten op een dode verbinding. Als je een middenklasser hebt (zoals Twemproxy), kan de situatie nog erger zijn.

Met andere woorden, "fire and forget"-verkeer wordt over het algemeen naar de server gestuurd en er gaat geen bericht verloren op het netwerk, maar als u server- of verbindingsproblemen hebt, kan wat verkeer verloren gaan voordat de client de kans heeft om het op te merken het. Ik zou dit een inspanningsgedrag noemen.




  1. Mongoose, zoek, retourneer specifieke eigenschappen

  2. Wachtwoord valideren / wachtwoord bevestigen met Mongoose-schema

  3. Python-database programmeren met MongoDB voor beginners

  4. Journaling beheren in MongoDB