sql >> Database teknologi >  >> NoSQL >> Redis

Garanterer Stackexchange.Redis' fire and forget levering?

Faktisk understøtter Redis-protokollen ikke rigtig "fire and forget"-operationer. Med undtagelse af pub-/undertrafik, matches alle Redis-kommandoer med et svar, og der er ingen måde at fortælle Redis-serveren om at udelade svaret.

Nu simulerer nogle klienter (som StackExchange.Redis) en "fire and forget"-tilstand gennem en asynkron implementering af protokollen. Faktisk er "fire and forget"-tilstanden i StackExchange.Redis meget lig den "asynkrone" tilstand, bortset fra at svarene simpelthen kasseres, når de modtages.

Er det pålideligt? Nå, det garanterer leveringen, så vidt TCP/IP garanterer leveringen. Netværket vil prøve hårdt på at transmittere pakkerne (til sidst vil pakkerne blive transmitteret igen, hvis nogle af dem går tabt), men det hele håndteres af TCP.

Hvis serveren nu er nede, eller beslutter at lukke forbindelsen, vil klienten kun være opmærksom på, når den forsøger at læse fra soklen. StackExchange.Redis kan med glæde fortsætte med at sende kommandoer på en død forbindelse i et stykke tid. Hvis du har et mellemniveau (såsom Twemproxy), kan situationen være endnu værre.

Med andre ord, "brand og glem"-trafik vil generelt blive sendt til serveren, og ingen besked vil gå tabt på netværket, men hvis du har server- eller forbindelsesproblemer, kan noget trafik gå tabt, før klienten har en chance for at bemærke det. Jeg vil kalde dette en bedste indsats.




  1. SQL NULLIF() Forklaret

  2. MongoDB .NET genererer ikke _id ved upsert

  3. Atomicitet, isolation og samtidighed i MongoDB

  4. JedisPoolConfig kan ikke tildeles til GenericObjectPoolConfig