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.