Redis brpoplpush

Redis brpoplpush
Redis kommer med titalls innebygde kommandoer for å operere på forskjellige datastrukturer som lister, hasj, sett og etc. De fleste av kommandoene utfører en bestemt type jobb og returnerer umiddelbart. I tillegg er et sett med kommandoer tilgjengelig for bruk med blokkering aktivert. Blokkeringsoperasjonene holder forbindelsen til Redis -serveren til en ekstern hendelse er ferdig. Det fine med å blokkere kommandoer er at de ikke blokkerer hele Redis -serveren, i stedet blokkerer de bare den anropende klientforbindelsen.

Redis har flere blokkerende kommandoer som fungerer på listedatastrukturer. LPOP -kommandoen brukes til å fjerne et element fra hodet på en gitt liste. Det vil fjerne hodeelementet fra listen og umiddelbart returnert. Det fjerne elementet vil nå klienten. Hver gang ingen elementer er til stede på listen, vil kommandoen komme tilbake umiddelbart med en null verdi. Den blokkerende varianten er BLPOP -kommandoen som vil holde forbindelsen til serveren når ingen elementer er til stede på listen. BLPOP -kommandoen vil vente til minst et element vises i listen for å returnere. Det er flere blokkerende kommandoer tilgjengelig for bruk med lister. I denne guiden vil vi fokusere på BRPoplpush -kommandoen.

Redis brpoPlpush -kommando

BRPOPLPUSH -kommandoen er blokkeringsvarianten av RPOPLPush -kommandoen. Derfor oppfører BRPoplPush -kommandoen seg på samme måte som RPOPLPush -kommandoen når ett eller flere elementer er tilgjengelige i kildelisten. Hver gang ingen enkelt element er på listen, holder BRPoPlPush -kommandoen forbindelsen til Redis -serveren til et element er tilgjengelig i kildelisten.

Syntaks:

Brpoplpush source_list destination_list timeout

Source_list: Listen som elementer vil bli fjernet fra
destinasjon_list: Listen som elementene vil bli presset inn i
pause: Tiden for å blokkere forbindelsen og holde den i live.

Brpoplpush -kommandoen vil fjerne et element fra halen til Source_list, først. Deretter vil elementet bli presset nær hodet til en annen destinasjon_list. Hver gang kilden er tom, vil den holde forbindelsen som vist på følgende:

Denne kommandoen har en konstant tidskompleksitet, og den er blitt avskrevet fra Redis versjon 6.2.0. Det anbefales å bruke Blmove kommando med IKKE SANT og VENSTRE argumenter. BRPoPlpush -kommandoen returnerer elementet som blir poppet fra kilden og skyvet inn i destinasjonen. Utgangen vil være en nullverdi hvis tidsavbruddet er nådd.

Eksempel - Meldingsserver med pålitelighetskøer

La oss anta at en meldingsserver bruker pålitelighetskøer for å lagre titalls bakgrunnsjobber for en gitt applikasjon. Serversiden listen har blitt brukt til å lagre IDS for hver bakgrunnsjobb. Flere klienter bruker listen ved å hente bakgrunnsjobber fra halen.

Den største ulempen med denne prosessen er: Hvis det er et nettverk eller klientapplikasjonssvikt, vil det returnerte stykket gå tapt før behandlingen på klientsiden. Derfor er det nødvendig med en egen pålitelig kø for å lagre det poppede elementet fra kildelisten mens den returnerer den til klienten. Videre kan kildelisten være tom når det ikke er noen bakgrunnsjobber produsert av utgivere. Derfor trenger vi en måte som klientforbindelse vil bli holdt og levende inntil en bakgrunnsjobb er tilgjengelig på kildelisten. BRPoPlpush -kommandoen er den ideelle kandidaten for å oppnå dette.

La oss ringe til Redis -serveren med BRPoPlpush -kommandoen som vist på følgende. Både kilde- og destinasjonsnøklene eksisterer ikke.

BRPOPLPUSH BAKGURNSJOBS_LIST ReliableQueue_List 0

Vi har spesifisert tidsavbruddsargumentet til 0, noe som betyr at BRPoplPush -operasjonen vil bli blokkert for alltid til du avslutter den manuelt. Nå venter det på at minst en enkelt bakgrunnsjobb skal være tilgjengelig på listen som er lagret på Key BAKGRUNNTJOBS_LIST.

Deretter vil vi skyve en bakgrunnsjobb til BAKGRUNNTJOBS_LIST Liste som vist i det følgende. La oss bruke LPush -kommandoen til å skyve en enkelt bakgrunnsjobb med IDen til “B1”.

Som forventet har "B1" -elementet blitt returnert til klienten som holdt forbindelsen til et element er tilgjengelig i kildelisten BAKGRUNNTJOBS_LIST. La oss inspisere destinasjonskøen Reliablequeue_list. Her bruker vi Lrange Kommando som vist i følgende:

Lrange Reliablequeue_list 0 10

Destinasjonskøen inneholder “B1” -elementet som er poppet fra kildelisten. Denne kommandoen garanterer at elementene er lagret i en annen kø uten å miste dem når en klient krasjer. BRPoPlPush -kommandoen kan brukes som en sirkulær liste når både kilden og destinasjonen er de samme.

Konklusjon

For å oppsummere har Redis titalls innebygde kommandoer som opererer på forskjellige datatyper. De fleste kommandoene er ikke-blokkerende der kommandoen vil bli returnert umiddelbart etter at jobben er ferdig. Som diskutert er flere innebygde blokkeringskommandoer tilgjengelige for å operere på listetyper. Brpoplpush -kommandoen er en av dem. Som du allerede vet, er det den blokkerende varianten av rpoplpush -kommandoen. Den oppfører seg det samme som RPOPLPush -kommandoen når minst et enkelt element er lagret i kildelisten. Hver gang kildelisten ikke eksisterer, vil BRPoPlPush -kommandoen vente på en spesifisert timeout til et element er til stede i kildelisten. Som sagt, siden det har konstant tidskompleksitet, veldig effektivt å bruke med pålitelige køer i meldingsserverne.