Redis sorterte sett inneholder unike, ikke-gjentatte strengtype medlemmer på en bestilt måte. Som standard bestilles de sorterte setmedlemmene i stigende rekkefølge etter poengsumverdiene. I tillegg opprettholder sorterte sett en nullbasert indeks der medlemmene er rangert som 0, 1, ... og så videre. Hver gang poengsumene er like blant to eller flere medlemmer, vil bestillingen gjøres ved leksikografisk orden. Siden de sorterte setelementene allerede er bestilt, kan medlemmene spørres med rang eller score på en rask måte. Videre er Redis-sorterte sett bygget på en dobbeltportert datastruktur som tillater Legg til, lese, fjerne og oppdatere operasjoner utføres i O (Log (N)) tidskompleksitet.
I denne guiden vil vi fokusere på Zrange -kommandoen, som kan brukes til å spørre om en rekke medlemmer etter deres score, indekser eller leksikografisk.
Zrange -kommandoen
Zrange -kommandoen brukes til å hente en rekke medlemmer av et sortert sett som er lagret på en gitt nøkkel. Denne kommandoen lar deg spørre om en rekke elementer basert på forskjellige egenskaper som rangering, poengsum eller leksikografisk rekkefølge. Som standard bruker Zrange-kommandoen et indeksbasert område. Den grunnleggende syntaksen til Zrange -kommandoen er som følger.
Syntaks:
Zrange sorted_set_key start slutt [BYSCORE | Bylex] [Rev] [Limit Offset Count] [Withscores]
Ovennevnte argumenter er obligatoriske for denne kommandoen, og noen valgfrie argumenter kan spesifiseres som følger.
Som nevnt returnerer Zrange -kommandoen listen over medlemmer i et gitt utvalg av et sortert sett som er lagret på en gitt tast. Hvis WithScores -argumentet er spesifisert, vises den tilhørende poengsummen. Starter med Redis versjon 6.2.0, Zrevrange, Zrangebyscore, Zrevrangebyscore, Zrangebylex, Zrevrangebylex -kommandoer kan erstattes av Zrange -kommandoen.
Bruk sak 01 - å hente de tre beste brukerne med de laveste opplevelsespoengene på et spillets toppliste
Indeksbasert område
La oss anta et online spill der hver bruker blir belønnet med erfaringspoeng basert på antall fullførte oppdrag. Redis sorterte sett datastruktur er en ideell kandidat til å holde denne informasjonen, som vist i det følgende.
Zadd OnlineGameUsers 3000 "Jack"
Zadd OnlineGameUsers 100 "Rihana"
Zadd OnlineGameUsers 1250 "Niku"
Zadd OnlineGameUsers 800 "Abigirl"
Zadd OnlineGameUsers 4500 "Dickson"
Som du kan se, har spillopplevelsespoengene blitt lagret som poengsummen for hvert medlem.
La oss inspisere det nyopprettede sorterte settet som er lagret på Key 'OnlineGameUsers'. Siden standardområdet spørring er basert på indekser, vil vi spesifisere minimums- og maksimumsgrensene som 0 og 5.
Zrange online -gameusers 0 5 withscores
Som forventet blir medlemmene sortert etter score i stigende rekkefølge. La oss spørre de tre beste brukerne med de laveste opplevelsespoengene. Siden settet er sortert i stigende rekkefølge, er det raskt og trivielt å få de tre beste medlemmene med de laveste poengene som følger.
Zrange online -gameusers 0 2 withscores
Som diskutert tidligere har de sorterte settene nullbaserte indekser. Derfor kan de tre første elementene spesifiseres som et indeksområde fra 0 til 2. Utgangen skal vise de tre beste elementene med de laveste score som følger.
Bruk sak 02 - å hente brukere med mer enn 3000 opplevelsespoeng på et spillets toppliste
I dette scenariet må vi spørre alle brukerne som har mer enn 1000 opplevelsespoeng. Siden vi snakker om et poengbasert område, la oss bruke det valgfrie argumentet for å spesifisere rekkevidden i poengsumverdier.
Zrange OnlineGameUsers (3000 +Inf ByScore Withscores
Rekkeviddegrensene er spesifisert ved hjelp av score. Siden vi trenger score på mer enn 3000, må poengsummen på 3000 utelukkes. Zrange -kommandoen støtter ekskluderende score ved å prefiksere den med '(' karakteren.
Som forventet har vi bare ett medlem hvis opplevelsespunkt (poengsum) er mer enn 3000.
Bruk sak 03: Få de tre beste brukerne hvis de har de høyeste opplevelsespoengene
Som standard bestiller de sorterte settene elementene i stigende rekkefølge. Derfor er medlemmet med lavest poengsum plassert ved 0th -indeksen. For å få de tre beste brukerne med høyeste score, må vi gi Rev -argumentet til Zrange -kommandoen som følger. Det vil bestille det sorterte settet i synkende rekkefølge og spørre indeksområdet som starter fra 0 til 2.
Zrange OnlineGameUsers 0 2 Withscores Rev
Bruk sak 04 - Henting av brukere hvis navn starter med “L” eller følgende brev
Zrange -kommandoen lar deg hente en rekke medlemmer basert på leksikografiske verdier hvis score er like blant medlemmene. La oss tilbakestille alle score til 0 som følger.
Zadd OnlineGameUsers 0 "Jack"
Zadd OnlineGameUsers 0 "Rihana"
Zadd OnlineGameUsers 0 "Niku"
Zadd OnlineGameUsers 0 "Abigirl"
Zadd OnlineGameUsers 0 "Dickson"
Som forventet er opplevelsespoengene (score) blitt tilbakestilt til 0 som vist på følgende.
La oss bruke Bylex -argumentet for å hente medlemmer hvis navn starter med bokstaven 'L' eller følgende bokstav.
Zrange online -gameUsers [L + Bylex
Områdegrensene er spesifisert ved hjelp av strengverdier (leksikografisk). Utgangen skal være alle medlemmene hvis navn starter med bokstaven 'L' eller følgende bokstav. Ideelt sett bør “Niku”, “Rihana” og “Dickson” være produksjonen. Boks bokstaven “D” kommer etter store bokstaver “L” i henhold til deres ASCII -verdier.
Konklusjon
Oppsummert brukes Zrange -kommandoen til å hente en rekke medlemmer som er lagret i et sortert sett som er lagret på en gitt tast. Som nevnt lar denne kommandoen deg spørre om en rekke faste elementer etter deres score, rekker eller leksikografiske verdier. Zrange -kommandoen kan også brukes med rev -argumentet for å snu sorteringsrekkefølgen. Totalt sett er flere muligheter pakket inn i denne kommandoen, og det har blitt en erstatning for flere kommandoer som Zrangebylex, Zrangebyscore, etc.