Redis Brpop

Redis Brpop
Listen er en populær Redis -datatype som lagrer en sekvens av strenger basert på innsettingsrekkefølgen. En liste kan inneholde mer enn 4 milliarder elementer. Det unike faktum om Redis -listen er at den opprettholder hode- og haleegenskapene der elementene kan settes inn fra begge sider. Vanligvis Lpush og Rpush Kommandoer brukes til å sette inn elementene i en liste. I mellomtiden opprettes den splitter nye listen med den spesifiserte tasten. Alle listekommandoer oppfører seg på samme måte der en ny liste opprettes når den sendes med en ikke-eksisterende nøkkel.


I tillegg, når alle elementene blir spratt fra listen, blir den tilhørende nøkkelen slettet fra Redis nøkkelområdet. Redis -listen er den ideelle kandidaten for applikasjoner med lav latens fordi innsetting og slettingsoperasjoner har konstant tidskompleksitet på HODE og HALE. Det spiller ingen rolle om fem eller tusen elementer er i listen. Tiden for innsetting og sletting tar en konstant tid nær venstre og høyre ender.

Det er noen praktiske behov for å fjerne elementene fra halen eller hodet på en gitt liste. De BRPOP og Blpop Kommandoer blir introdusert fra Redis versjon 2.0.0 For å oppfylle det nevnte kravet. De BRPOP Kommandoen blir evaluert i denne guiden.

BRPOP -kommandoen

De BRPOP er den avanserte versjonen av Rpop kommando. De Rpop Kommando dukker et element fra halen på listen som er lagret på en gitt tast. Som navnet antyder, er BRPop -kommandoen den blokkerende versjonen av RPOP. Når nøkkelen ikke eksisterer, vil ikke BRPop -kommandoen komme tilbake med nil Verdi med en gang i RPOP -kommandoen. I stedet venter den til en ny liste er opprettet på den tasten. Etter opprettelsen av en ny liste på den nevnte nøkkelen, spretter BRPop -kommandoen på haleelementet. Denne kommandoen godtar også flere nøkler og bare popper elementene fra den første ikke-tomt nøkkelen.

Syntaks:

Følgende er syntaks for BRPop -kommandoen:

Brpop list_key [list_key…] timeout


list_key: Dette er nøkkelen til listen.
pause: Dette er tidsavbruddsverdien i sekunder der klienten er blokkert til denne tidsavbruddet når.

Vanligvis returnerer BRPop -kommandoen en matriseutgang:

Hvis en ikke-tom liste er spesifisert, returnerer kommandoen Popped Element-verdien og nøkkelen til den inneholdende listen som i følgende format:

1) "Carlist"
2) "Benz"

Når ikke noe element skal poppes fra noen av listene som er spesifisert og tidsavbruddet er utløpt, er nil Verdien returneres.

(null)
(10.46s)

Eksempel: Radiostasjonsspilleliste -manipulasjon med BRPop

La oss anta at en radiostasjon trenger å spille sanger fra en daglig spilleliste. Spillelisten inneholder sang -ID -ene å spille. Sangene skal bestilles i innsettingsrekkefølge. Hver sang er valgt fra slutten av spillelisten for å spille.

Vi kan bruke Redis List -datastrukturen til å implementere den nevnte spillelisten og listeoperasjonene for å manipulere spillelistesangene. La oss lage en spilleliste som heter MidnightPlist og legg til noen sang -ID -er som vist i det følgende. De Lpush Kommando brukes til det:

LPush MidnightPlist Song001 Song004 Song010 Song100 Song101


Dette vil lage en liste som vist på følgende:

Head -> Song101 | Song100 | Song010 | Song004 | Song001 <- tail


Ikke-blokkerende oppførsel av BRPop-kommandoen

Nå er det på tide å starte et show. Vi bør velge noen sanger fra slutten av spillelisten. Derfor, Song001 bør fjernes fra spillelisten, og den må spilles av opptakeren. Vi bruker BRPop -kommandoen for å poppe Song001 fra spillelisten og for å få sang -ID til klientlytteren.

BRPOP MidnightPlist 5


Timeout -argumentet er spesifisert som fem sekunder. Siden MidnightPlist inneholder elementer, BRPOP Kommando oppfører seg på en ikke-blokkerende måte. Derfor dukker det opp og returnerer haleelementet til klienten.

Blokkerende oppførsel av BRPop -kommandoen

De tidligere resultatene kan også oppnås gjennom RPOP -kommandoen. La oss derfor se på den virkelige fordelen med BRPop -kommandoen med blokkeringsatferden. La oss fjerne alle elementene fra MidnightPlist Nøkkel ved hjelp av RPOP -kommandoen.

RPOP MidnightPlist 4


Dette fjerner alle de gjenværende elementene fra listen og MidnightPlist Nøkkelen blir også slettet fra Redis -nøkkelområdet.

La oss utføre BRPop-kommandoen med 60 sekunders timeout og den ikke-eksisterende nøkkelen MidnightPlist. Nå oppfører kommandoen seg på en blokkerende måte. Det venter på at nøkkelen skal opprettes og elementet skal være til stede i spillelisten MidnightPlist.


La oss skyve et element til midnattlisten via et annet terminalvindu som er koblet til den samme Redis Data Store.

LPush MidnightPlist Song400


Etter opprettelsen av MidnightPlist Liste med elementet Song400, Klientvinduet som utførte BRPop -kommandoen dukker opp elementet Song400 fra spillelisten og returnerer sang -IDen som utgang øyeblikkelig.


Velg en sang fra flere spillelister

Det kan være flere spillelister laget av radiostasjonen. Derfor bør vi velge en sang fra de gitte spillelistene på et gitt tidspunkt. La oss anta at vi fikk tre spillelister: MidnightplayList1, MidnightplayList2, og MidnightplayList3. MidnightplayList1 er allerede tom, mens de to andre spillelistene er ikke-tomme.

LPush MidnightplayList2 Song1002 Song1005
LPush MidnightPlayList3 Song3000


La oss ringe BRPop -kommandoen med alle de tre tastene som vist i følgende:

BRPOP MidnightPlist1 MidnightPlist2 MidnightPlist3 10


Siden den første nøkkelen MidnightplayList1 er tom, det blir ignorert av kommandoen her. Den sjekker for den første ikke-tomt nøkkelen fra den tilgjengelige nøkkellisten. Derfor lokaliserer kommandoen MidnightplayList2 som den første ikke-tomt nøkkelen fra rekkefølgen på nøkler. Som forventet, Song1002 fjernes fra MidnightplayList2.


BRPop -kommandoen har konstant tidskompleksitet nær hodet og halen når en enkelt nøkkel er spesifisert. Tidskompleksiteten blir o (n) når flere nøkler er spesifisert i kommandoen. Videre er denne kommandoen veldig effektiv å bruke i lav latensapplikasjoner som kø, stabel, tidslinje i sosiale medier osv.

Konklusjon

For å oppsummere, er en Redis -liste en samling strengelementer som er lagret på en gitt tast mens du er sortert i innsettingsrekkefølge. Flere kommandoer er tilgjengelige for å operere på Redis -listene med konstant tidskompleksitet nær hodet og halen. Som sagt brukes BRPop -kommandoen til å fjerne elementene fra høyre side av Redis -listen som er lagret på en gitt tast med støtte for blokkering. BRPOP -kommandoen blokkerer klientforbindelsen når ingen elementer er tilgjengelige for å fjerne fra de spesifiserte listene. Som du vet, aksepterer denne kommandoen flere nøkler der et element dukker opp fra den første ikke-tomme listen der hver tast blir sjekket i den rekkefølgen de sendes til kommandoen.