Redis Xack

Redis Xack
Redis inkluderer vanlige datatyper som strenger, lister, hashmap og sett. I tillegg støtter den mer komplekse datastrukturer som strømmer. Det er introdusert fra Redis versjon 5.0. Strømstypen er basert på den allment kjente loggdatastrukturen. Derfor bruker Redis Streams den bare append-bare teknikken i base implementeringen.

Dataene i strømmen er uforanderlig. De nye dataene kan bare legges ved slutten av strømmen. Redis -strømmer kan holde oppføringer som ikke bare er strenger. Hver oppføring kan inneholde ett eller flere feltverdipar som i Redis Hashes. Disse oppføringene har en unik ID for å identifisere dem i strømmen, lik linjenummer eller byte forskyvninger som brukes i en loggfil. Følgende illustrasjon vil gi en bedre forståelse av hvordan Redis -strømmen ser ut:

XADD -kommandoen brukes til å legge oppføringer til en gitt strøm som er grei. Datatilgangsmekanismen er forskjellig med strømtyper sammenlignet med andre typer. Den primære fordelen med strømmer er at de kan presse de nylig vedlagte meldingene til flere kunder eller forbrukere. Det er bare en måte å se på Redis -strømmer. Videre kan vi se det som en tidsseriebutikk der du kan iterere over hele strømmen for å hente alle oppføringene for en gitt tidsramme.

Redis stream forbrukergrupper

Som nevnt tillater Redis -strømmer flere forbrukere å lese data fra det. I tillegg utvider den denne funksjonaliteten til et nivå av tilgang til en delmengde av strømmeldingene av forskjellige forbrukere. Hver forbruker vil fange forskjellige data å behandle, mens Kafka implementerer samme oppførsel med forbrukergrupper. Forbrukergruppeteknikken er tilgjengelig i Redis -strømmer som tillater distribusjon av de gitte strømdataene blant flere forbrukere.

Vi kan bruke xreadGroup -kommandoen til å lese data via en forbrukergruppe. Hver forbrukergruppe kan inneholde flere forbrukere identifisert med et unikt navn.

Xack -kommandoen

Som tidligere nevnt får forbrukere i en forbrukergruppe meldinger fra strømmen der meldings -ID -ene er større enn den sist leverte ID. Når du leverer en melding til en forbruker, vil statusen bli satt til å versere og lagres i en forbrukergruppes ventende oppføringsliste (PEL). Det er en bivirkning av å ringe enten XReadGroup eller Xclaim -kommandoer. Dette vil fortsatt føre til at serveren returnerer de verserende meldingene når du ringer ved å bruke XReadGroup -kommandoen for å hente meldingshistorikken per forbruker. Derfor introduserte Redis -forbrukergrupper en godkjenningsprosess for meldinger. Xack -kommandoen kan varsle serveren om at en hentet melding er blitt behandlet. Det ville fjerne oppføringen for en slik melding i PEL.

Syntaks

Xack

Xack -kommandoen returnerer antall anerkjente oppføringer som svar.

Eksempel: Lastbalanser serverer forskjellige klienter fra flere servernoder

La oss se på et virkelig verdensscenario der en lastbalanse leser fra en strøm av klient-IP-adresser og betjener hver klient fra forskjellige servernoder. Vi kan tenke på dette som en forbrukergruppe som leser fra en Redis -strøm der gruppen inneholder flere forbrukernoder.

Først bør vi opprette en forbrukergruppe som hver servernode tilhører. Vi kan bruke følgende XGroup -kommando for å opprette en forbrukergruppe for en gitt strøm:

Xgroup create ipaddressStream Ukservergroup $ mkstream

Kommandoen er selvforklarende, hvor ipaddressStream har en ny forbrukergruppe kalt Ukservergroup Det gir bare de nyeste meldingene som er tilgjengelige for strømmen når en forbruker er tilkoblet. Det skaper også ipaddressStream strøm fordi Mkstream Parameter er spesifisert.

Deretter bør vi legge til flere IP -adresser til ipaddressStream Opprettet tidligere ved hjelp av følgende Redis XADD -kommando:

Xadd ipaddressStream * ip 123.456.12.1
xadd ipaddressStream * ip 223.400.000.100
xadd ipaddressStream * ip 010.333.200.090
xadd ipaddressstream * ip 320.333.220.200
xadd ipaddressStream * ip 212.111.111.222

Output etter hver kommando:

Dette vil legge til 5 oppføringer til ipaddressStream strøm. Hver oppføring er tilordnet en servergenerert unik ID som har returnert etter å ha ringt XADD-kommandoen.

La oss nå lese ipaddressStream via Ukservergroups forbruker ringte Server0.

XreadGroup Group UkserverGroup Server0 Count 2 Streams iPaddressStream>

Produksjon

Som forventet, Server0 forbruker får to nye meldinger fra ipaddressStream strøm. Disse to IP -adressene er lagt til i listen over ventende oppføringer. Hvis vi ringer xreadGroup -kommandoen med 0 -IDen, vil den returnere de verserende meldingene for Server0 forbruker.

xreadGroup Group UkserverGroup Server0 Streams iPaddressStream 0

Produksjon

Dette betyr at serveren fortsatt venter på Server0 forbruker for å anerkjenne disse to meldingene. La oss erkjenne meldingene for Server0 Forbruker ved hjelp av følgende Xack -kommando.

Xack ipaddressStream UkserverGroup 1656192378464-0 1656192389344-0

Her erkjenner vi begge oppføringene som er identifisert av de respektive ID -ene. Kommandoen returnerer også antallet av de vellykket behandlede meldingene. Det er to i dette tilfellet.

Produksjon

Etter den forrige prosessen, burde de to meldingene ha blitt fjernet fra listen over ventende oppføringer (PEL). Derav Server0 Forbrukeren vil ikke returnere noen ventende meldinger etter å ringe XReadGroup -kommandoen via forbrukergruppen Ukservergroup.

xreadGroup Group UkserverGroup Server0 Streams iPaddressStream 0

Produksjon

Den returnerer en tom matrise som betyr ingen ventende meldinger for denne forbrukeren. Meldingsbekreftelsesfunksjonen er veldig nyttig i de typene scenarier.

Konklusjon

Redis kommer med strømdatatypen hvis underliggende implementering er basert på loggdatastrukturen. Derfor blir de nye oppføringene vedlagt på slutten av strømmen. Den største fordelen er at flere forbrukere kan spørre de nyeste meldingene som er lagt til strømmen. Videre tillater Redis Consumer Group -teknikken lesestrømmen av en gruppe forbrukere der hver forbruker bare ser en delmengde av strømningsmeldingene. Når du leser forbrukerens oppføring fra strømmen, legges slik oppføring i listen over ventende oppføringer. Derfor må forbrukeren erkjenne hver av de ventende meldingene. Det vil varsle serveren om å fjerne oppføringen fra PEL og frigjøre minnet. Xack -kommandoen kan brukes til å anerkjenne Redis Stream -meldinger. Det støtter å anerkjenne flere meldinger samtidig.