Spørring av redis sorterte settelementer
Redis -sorterte sett er ganske forskjellige fra de normale settene. Selv om begge satte typer lagrer de unike medlemmene inne, setter de sorterte settene elementene på en ordnet måte. De viktigste egenskapene til Redis -sortert sett er:
Derfor kan Redis -sorterte setmedlemmer hentes ut fra flere tiltak som poengsum, rangering (indeks) og leksikografisk. Zrangebyscore og Zrange er de to viktigste Redis -sorterte settkommandoer som kan brukes til å iterere over medlemmene basert på de tidligere uttalte tiltakene. I denne guiden vil vi fokusere på ZrangeByscore -kommandoen som brukes til å spørre medlemmer av en rekke scoreverdier.
Zrangebyscore -kommandoen
Siden Zrangebyscore -kommandoen har en logaritmisk tidskompleksitet, er den veldig rask til å hente de sorterte settelementene. I tillegg reduserer kommandoalternativene som grense hentingstiden med et betydelig beløp. Derfor er ZrangeByscore-kommandoen trygt å bruke i sanntidsapplikasjoner med lav latens som online toppliste, prioriterte køer og sekundærindeksering generelt.
Syntaks:
Zrangebyscore sorted_set_key minimum_score maximum_score [withscores] [limit offset count]
sorted_set_key: Dette er den unike identifikatoren der det sorterte settet er lagret på.
minimum_score: Den nedre grensescoreverdien for det spesifiserte området.
maksimal_score: Den høyere grensescoreverdien for det spesifiserte området.
Withscores: Dette valgfrie argumentet returnerer hvert elements poengsum.
GRENSE: Dette valgfrie argumentet kan brukes til å begrense det returnerende elementtallet fra en spesifisert posisjon av det sorterte settet.
Zrangebyscore -kommandoen returnerer de sorterte settmedlemmene mellom de spesifiserte minimum_score og maksimal_score score. Disse medlemmene blir returnert i stigende rekkefølge basert på poengsumverdiene. Hvis de flere medlemmene har samme score, følger kommandoen den leksikografiske bestillingen.
Eksempel: Online Game Leaderboard basert på spilleropplevelse
La oss anta at det er et online spill der hver spiller kan få opplevelsespoeng når de fullfører oppdragene, oppdager oppdrag og beseirer fiendene. Siden Redis sorterte sett er responsive og datastrukturene i minnet der medlemmene bestilles basert på en poengsum, kan de brukes til å lagre spillerdetaljene. I sin tur kan informasjonen returneres med lav latens.
Som vist i forrige illustrasjon, kan spillerinformasjonen legges til et Redis -sortert sett og kan manipuleres senere når det er nødvendig.
La oss legge til de fire spillerne som er vist i forrige illustrasjon. Vi vil bruke Zadd -kommandoen for å opprette og legge til spillerdetaljene til det sorterte settet "Leaderboard: XP”.
Zadd Leaderboard: XP 1500 Spiller: 01
Zadd Leaderboard: XP 2500 Spiller: 02
Zadd Leaderboard: XP 1000 -spiller: 03
Zadd Leaderboard: XP 3500 Spiller: 04
Spør alle spillerne i spillets toppliste
Vi kan bruke ZrangeByscore -kommandoen for å hente alle spillerne i spillets toppliste som vist på det følgende. Minimum og maksimal poengsumverdier er spesifisert som 1000 og 3500. Vi kan bruke -inf og +inf Verdier hvis vi ikke er sikre på de laveste og høyeste poengsumverdiene:
Zrangebyscore Leaderboard: XP 1000 3500
ELLER
Zrangebyscore Leaderboard: xp -inf +inf
Alle medlemmene blir returnert som i følgende utgang:
Utgangen sorteres i stigende rekkefølge etter scoreverdier.
Ekskluder minimumsverdiene eller maksimumsverdiene
I forrige eksempel inkluderer Min- og Max -poengsumverdiene for rekkevidden. Vi kan ekskludere Min- og Max -scoreverdiene fra området ved å prefiksere poengsummen med “(“ -karakteren som vist i følgende:
Zrangebyscore Leaderboard: XP (1000 (3500
Som vist i følgende utgang, utelukker utgangen medlemmene hvis score er 1000 og 3500.
Vis både medlems- og scoreverdiene sammen
Vi kan bruke WithScores valgfritt argument med ZrangeByscore -kommandoen for å vise poengsumverdiene per medlem.
Zrangebyscore Leaderboard: XP -inf +Inf Withscores
Produksjon:
Begrens antallet medlemmer som er returnert
I noen scenarier må vi begrense antallet returnerte medlemmer per samtale. La oss si at vi må få de to beste medlemmene hvis opplevelsesverdier (poengsum) er de laveste. Vi kan bruke grenseargumentet med antallet 2 og forskyvning av 0. Offset er rangering per medlem.
ZrangeByscore Leaderboard: XP -inf +Inf Limit 0 2
Dette returnerer de to beste medlemmene hvis score er de laveste.
Du kan også bruke grenseargumentet med Withscores -argumentet.
Zrange -kommando i stedet for Zrangbyscore
Med redis 6.2.0 Versjon, ZrangeByscore -kommandoen er utdatert. Derfor kan vi bruke Zrange -kommandoen som oppfører seg den samme som Zragnebyscore -kommandoen når den brukes med Byscore valgfrie argument.
Konklusjon
Oppsummert brukes ZrangeByscore -kommandoen til å spørre medlemmene mellom det spesifiserte minimums- og maksimale poengsumverdiene for et Redis -sortert sett som er lagret på en gitt nøkkel. Som sagt har denne kommandoen en logaritmisk tidskompleksitet som kan brukes til å iterere over et sett med medlemmer med lav latens. Den støtter også et par valgfrie argumenter, grense og med scores, som begrenser det returnerte medlemstall.