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

Hvad er de vigtigste forskelle mellem Redis Pub/Sub og Redis Stream?

Datalagring

Pub/Sub er en udgiver-/abonnentplatform, det er ikke datalagring. Publicerede beskeder fordufter, uanset om der var nogen abonnent.

I Redis Streams er stream en datatype, en datastruktur i sig selv. Beskeder eller poster gemmes i hukommelsen og forbliver der, indtil de beordres til at blive slettet.

Synkronisering/Asynkron kommunikation (Push/Pull)

Pub/Sub er synkron kommunikation (push protokol). Alle parter skal være aktive på samme tid for at kunne kommunikere. Her er Redis en ren synkron meddelelsesmægler.

Redis Streams tillader både synkrone (XREAD med BLOCK og den særlige $ ID er et push protokol) og asynkron kommunikation (almindelig XREAD er et træk protokol). XREAD med BLOCK er ligesom Pub/Sub, men med mulighed for at genoptage ved afbrydelse uden at miste beskeder.

Leveringssemantik

Pub/Sub er At-most-once, dvs. "fire and forget".

Redis Streams giver mulighed for både mindst én gang eller mindst én gang (eksplicit bekræftelse sendt af modtageren)

Blokeringstilstand for forbrugere

Pub/Sub er kun blokerende. Når klienten abonnerer på en kanal, sættes den i abonnenttilstand, og den kan ikke udstede kommandoer (undtagen [P]SUBSCRIBE , [P]UNSUBSCRIBE , PING og QUIT ), er den blevet skrivebeskyttet.

Redis Streams giver forbrugerne mulighed for at læse beskeder i blokeringstilstand eller ej.

Fan-out

Pub/Sub er kun fan-out. Alle aktive klienter får alle beskeder.

Redis Streams tillader fan-out (med XREAD ), men også for at give en anden undergruppe af beskeder fra den samme strøm til mange klienter. Dette muliggør skalering af meddelelsesbehandling ved at dirigere forskellige meddelelser til forskellige medarbejdere på en måde, så det ikke er muligt, at den samme meddelelse leveres til flere forbrugere. Dette sidste scenario opnås med forbrugergrupper .

Redis Streams giver mange flere funktioner, såsom tidsstempler, felt-værdi-par, intervaller osv. Det betyder ikke, at du altid skal gå efter Streams. Hvis din use-case kan opnås med Pub/Sub, er det bedre for dig at bruge Pub/Sub. Med Streams skal du passe på hukommelsesbrug.




  1. Sådan konverteres en MongoDB-visning til en samling

  2. Hadoop RecordReader Introduktion, arbejde og typer

  3. Konverter dato fra millisekunder til ISODate-objekt

  4. Sådan gemmer og henter du en ordbog med redis