Introduksjon til Redis -sorterte sett

Introduksjon til Redis -sorterte sett
Redis sorterte sett er en mer avansert versjon av sett. Et sortert sett arver alle egenskapene fra Redis Set Data Structure. I tillegg opprettholder de rekkefølgen på holdt elementer. Hvert medlem av et sortert sett har en poengsum som brukes til å bestille setelementene i stigende rekkefølge.

De sorterte settene er veldig raske med å legge til, oppdatere og fjerne medlemmene sine. Det har logaritmisk tidskompleksitet på alle disse operasjonene. Siden medlemmene bestilles, er det også veldig effektivt å få tilgang til det midterste elementet. Derfor vil det sorterte settet være ideelt for å implementere sanntidsapplikasjoner som online spill-toppliste, prioriterte køer med lav latens og sekundære indekser.

Zadd -kommandoen

Flere kommandoer er tilgjengelige for å operere på sorterte sett. De Zadd Kommando brukes til å legge til ett eller flere medlemmer med score til et sortert sett som er lagret på en gitt nøkkel. Denne kommandos tidskompleksitet er proporsjonal med logaritmen til antall elementer. Derfor er det mye raskere enn de fleste av de andre Redis -kommandoene.

Hver gang vi legger til medlemmer som bruker ZADD -kommandoen, er det noen direkte effekter som finner sted i det sorterte settet.

Siden et sortert sett har et unikt sett med medlemmer, tillater det ikke å legge til allerede spesifiserte medlemmer i det sorterte settet. I stedet vil det oppdatere poengsummen til det aktuelle medlemmet og plassere det elementet i riktig indeks for å opprettholde riktig rekkefølge.

Hvis den sorterte set -tasten ikke eksisterer, vil ZADD -kommandoen opprette det sorterte settet og legge til alle de spesifiserte medlemmene.

Hvis nøkkelen eksisterer, men ikke er ment å ha en sortert set -type verdi, vil den øke en feil.

Syntaks

Zadd [NX | Xx] [GT | LT] [CH] [incr] [Poengmedlem…]

Vanligvis returnerer ZADD -kommandoen antall medlemmer som er lagt til det sorterte settet. Derfor ignorerer den poengsumoppdateringene for de allerede eksisterende medlemmene. Denne returverdien vil endre seg hvis Ch alternativet er spesifisert. Derfor vil tellingen for alle de endrede medlemmene bli returnert av ZADD -kommandoen. Denne tellingen inkluderer summen av nylig lagt til og poengsummen endret medlemmer.

Eksempel 01 - Online Gaming Leaderboard

La oss anta et scenario der vi trenger å administrere et brukerplate for et online eventyrspill som spilles av tusenvis av brukere over hele verden. Spillets natur er at hver bruker tjener gull per vellykket gjennomføring av hvert oppdrag. Redis sortert sett ville være den ideelle datastrukturen som vi kan bruke for denne typen sanntids lav latensapplikasjon.

Vi oppretter et sortert sett identifisert av nøkkelen gameleaderboard. Videre vil flere spillere bli lagt til som sorterte setmedlemmer med forskjellige score. Hver brukers opptjente gullbeløp vil bli kartlagt som den sorterte set -poengsummen.

Legger til flere medlemmer med ZADD

Zadd Gameleaderboard 2300 Gamer: 1 1400 Gamer: 2 800 Gamer: 3 3500 Gamer: 4 4000 Gamer: 5

Produksjon:

Som forventet er returverdien 5. Det er antall medlemmer lagt til det sorterte settet som er lagret på tasten gameleaderboard.

La oss sjekke om det sorterte settet inneholder alle medlemmene på en bestilt måte. Vi kan bruke Zrange -kommandoen til å spørre om alle medlemmene med poengsummen deres som vist på følgende:

Zrange Gameleaderboard 0 10 Withscores

Som nevnt, den gameleaderboard Sorterte sett lagrer medlemmene i stigende rekkefølge basert på score.

Legge til et nytt medlem med samme poengsum som det eksisterende medlemmet

La oss prøve å legge til en annen bruker Gamer: 6 med gullmengden på 3500. Redis sorterte sett tillater å sette inn medlemmer med samme poengverdi. Derfor bør denne operasjonen med hell legge til Gamer: 6.

Zadd Gameleaderboard 3500 Gamer: 6

Produksjon:

Som forventet er returverdien 1 som verifiserer medlemmet er lagt til vellykket.

La oss inspisere de sorterte settmedlemmene ved hjelp av Zrange -kommandoen igjen.

Medlemmet Gamer: 6 har blitt satt inn like etter Gamer: 4. Redis sorterte sett Bruk den leksikografiske bestillingen hvis poengverdiene er de samme for de spesifiserte medlemmene. Den sammenligner medlemstrenger som en rekke byte og bestiller dem deretter.

Bruk av NX- og XX -alternativer med ZADD

La oss anta at vi bare trenger å oppdatere poengsummen til et eksisterende medlem og ikke legge til nye medlemmer til det sorterte settet gameleaderboard. De Xx Alternativet brukes til å oppnå dette.

Zadd Gameleaderboard xx 3500 Gamer: 7 3000 Gamer: 5

Som forventet er returverdien 0, noe som betyr at ingen nye medlemmer ble lagt til. Vi vil inspisere det sorterte settet igjen.

De Gamer: 7 medlem er ikke lagt til det sorterte settet, men Gamer: 5 Medlemmets poengsum er endret, og det er plassert deretter.

De Nx alternativet gjør det motsatte av Xx.

Zadd Gameleaderboard NX 5500 Gamer: 7 4000 Gamer: 5

La oss inspisere det sorterte settet igjen.

Som nevnt ovenfor, det nye medlemmet Gamer: 7 har blitt lagt til vellykket. De Gamer: 5 Poengverdi er ikke endret.

Bruk av LT- og GT -alternativer med ZADD

LT- og GT -alternativene er veldig nyttige når du trenger å oppdatere poengsumverdier betinget. Noen av disse to flaggene vil ikke forhindre å legge til nye elementer i det sorterte settet.

Hver gang du spesifiserer LT -alternativet med ZADD -kommandoen, vil det endre poengverdien hvis og bare hvis den nye poengsummen er mindre enn den nåværende poengsummen til det elementet. GT -alternativet vil bare endre poengsummen hvis den nye poengsummen er større enn gjeldende poengsum.

Zadd Gameleaderboard LT 2100 Gamer: 1 1500 Gamer: 2

La oss inspisere gameleaderboard sortert sett.

Som du kan se, Gamer: 1 Medlemmets forrige poengsum var 2300. Derfor har poengsummen blitt endret med denne operasjonen, og den er endret til 2100. De Gamer: 2-Medlemsscore endres ikke siden den forrige poengsummen var mindre enn den nye poengsummen.

CH -alternativet

Vanligvis returnerer ZADD -kommandoen antall medlemmer lagt til. Med CH -alternativet vil det returnere summen av nylig lagt til og de eksisterende medlemmene hvis score er endret.

Zadd Gameleaderboard Ch 2100 Gamer: 8 1500 Gamer: 2 3550 Gamer: 4

Ved utførelsen av kommandoen ovenfor, Gamer: 8 Medlemmet må legges til. De Gamer: 2 og Gamer: 4 Medlemmenes poengsumverdier må endres. Derfor er summen av nylig tilsatt og modifiserte medlemmer 3.

Bruk av Incr -alternativet i Zadd

De Ink Alternativet vil øke poengsummen til et medlem etter det spesifiserte økningsnummeret. Zadd -kommandoen oppfører seg nøyaktig som Zincrby.

La oss øke Gamer: 7 Medlemmets poengsum med ytterligere 100 som vist i det følgende

Zadd Gameleaderboard incr 100 Gamer: 7

Som forventet er den forrige poengsumverdien økt med 100. Den nye poengsummen returneres som 5600.

Konklusjon

Redis sortert sett er en mer avansert datastruktur som arver alle egenskapene fra vanlige sett. De sorterte settene er mye raskere enn de fleste av Redis -kommandoene. Derfor er de sorterte settene mye brukt i sanntids lav latensapplikasjoner. ZADD -kommandoen brukes til å opprette et sortert sett på en spesifisert nøkkel med flere medlemmer. Medlemmene bestilles basert på poengsummenes verdier. Hver gang poengsumverdiene er de samme for flere medlemmer, vil bestillingen bli gjort ved hjelp av leksikografisk bestilling.