Redis støtter markørbaserte iteratorer. Disse iteratorene kan trinnvis sløyfe gjennom samlingen og returnere et begrenset antall elementer. Samtidig returnerer den den oppdaterte markørindeksen/IDen som et heltall å bruke i neste iterasjon. En markør er en peker som er vedlikeholdt av iteratoren for å beholde det nye stedet etter hver iterasjon.
Skanner iteratoren
Skannekommandoen er basen for mange andre redis iteratorer. Denne iteratoren garanterer ikke antall elementer som returneres i hver sløyfe. Det kan returnere 0 elementer eller alle elementene i en gitt iterasjon. Det kan også produsere det samme elementet flere ganger fordi samlingen kan endre seg, noe som er en ulempe i skanning. Skannekommandoen returnerer to verdier i hver utførelse. Den første verdien er en referanse -ID til markøren, og den andre verdien er en samling av elementer. Det starter alltid fra markøren 0. Flere andre iteratorer er avledet fra skannings iterator, for eksempel SSCAN, HSCAN og ZSCAN. Disse kommandoene har samme oppførsel, men fungerer på forskjellige typer samlinger.
Full iterasjon
Siden skannekommandoen ikke garanterer antall elementer som er returnert i hver iterasjon, er den eneste måten å varsle om at iteratoren har blitt sløyfet gjennom hele samlingen er å sjekke den returnerte markørreferanse -IDen eller indeksen i hver utførelse. Hvis den returnerte markøren er 0, indikerer det at alle elementene er iterert. Det kalles en full iterasjon.
SSCAN -kommandoen
SSCAN -iteratoren er avledet fra skannings iterator. Derfor utvides all atferd fra skannekommandoen, men den itererer bare over angitte typer.
Syntaks
SSCAN SET_KEY MACSOR [MATCH MATINTER] [Count Count]set_key: Dette er nøkkelen til settet.
markør: Referanse -ID for følgende markør, som returneres etter hver samtale.
Kampen og tellingen er to valgfrie parametere som kan brukes til å filtrere ut de returnerte elementene basert på et gitt mønster og begrense antallet returnerte elementer.
Denne kommandoen ville returnere neste markør og en rekke elementer. Den returnerte markør -IDen kan sendes til SSCAN -kommandoen i neste samtale.
Eksempel 1: itererer over et lite sett
La oss opprette et Redis -sett ved hjelp av SADD -kommandoen.
sadd setofcolors rød grønn svart hvit blå rosa grå oransje lilla gulDen forrige kommandoen vil opprette et nytt sett SetofColors og legg til 10 medlemmer på en uordnet måte. Vi kan bruke Smembers -kommandoen for å bekrefte forrige operasjon.
Smør setofColorsSom forventet, settet SetofColors er blitt opprettet.
Vi kan bruke SSCAN -kommandoen til å iterere over SetofColors Sett som vist i følgende:
SSCAN SetofColors 0Som nevnt, skal kommandoen starte med markøren 0. Settets nøkkel er også passert. Siden SetofColors Inneholder bare 10 medlemmer, SSCAN -kommandoen kan returnere alle elementene i den første iterasjonen. Fordi det SetofColors er et relativt lite sett.
Produksjon
Som diskutert returnerte kommandoen to verdier da den første er 0. Det betyr at ovennevnte er en full iterasjon. Det er ikke nødvendig å ringe SSCAN igjen. Alle de ti medlemmene er returnert som den andre returverdien av denne kommandoen.
Eksempel 2: itererer over et stort sett
Vi skal lage et sett med mer enn 20 medlemmer.
sadd alfabet a b c d e f g h i j k l m n o p q r s t u v w x y zLa oss iterere over alfabet sett.
sscan alfabet 0Som vanlig har vi startet med markøren 0. Dessuten er set -tasten blitt bestått som alfabet. Det returnerte bare 11 medlemmer fra den første iterasjonen, som vist i følgende:
Neste markør er 6. La oss ringe SSCAN -kommandoen igjen med de aktuelle argumentene.
Nå returnerte den ytterligere 10 medlemmer og neste markør som 13. Vi må ringe SSCAN -kommandoen igjen for å fullføre hele iterasjonen.
Den returnerte markørverdien er 0, noe som betyr at iteratoren har iterert gjennom hele settet.
Eksempel 3: Mønstermatching med SSCAN
Vi kan bruke kampparameteren til å filtrere ut de returnerte medlemmene basert på et spesifisert mønster. La oss lage et nytt sett som heter Brukernavn med noen medlemmer.
Sadd Brukernavn John Norek Pinku Juwana Jorgia Noton Derek Desman Julia Jumini Piter Pinso DemianVi vil kalle SSCAN -kommandoen med kampargumentet for å hente alle brukernavnene som starter med “JU”.
SSCAN Brukernavn 0 Match Ju*Produksjon
Vi har tre brukernavn som starter fra “JU” i settet. Men den har bare returnert en i denne iterasjonen. Derfor må vi ringe SSCAN -kommandoen igjen med den oppdaterte markøren.
SSCAN Brukernavn 7 Match Ju*Produksjon
Iteratoren har sløyfet gjennom alle elementene i settet, og vi har tre medlemmer som samsvarer med mønsteret vårt.
Eksempel 4: Begrens antall elementer per samtale
Redis Sscan -kommandoen returnerer rundt ti elementer per samtale som standard, men du kan eksplisitt spesifisere antall elementer som skal returneres per samtale. Som kan gi et betydelig ytelsesøkning til søknaden din.
La oss bruke det forrige settet og begrense antall elementer som returneres per samtale til tre. Vanligvis vil det returnerte elementantallet svinge rundt 3. Vi kan spesifisere tellingsargumentverdien for å oppnå denne oppførselen.
sscan brukernavn 0 teller 3Produksjon
Vanligvis returnerer den rundt 10 medlemmer, men nå er det bare 4 elementer. Det samme skjedde med følgende samtaler også.
SSCAN Brukernavn 6 Count 3Dette er veldig nyttig når du har å gjøre med store sett.
Konklusjon
Redis inkluderer flere samlingstyper, for eksempel sett, hasj og sorterte sett. Vanligvis kan iteratorene brukes til å sløyfe gjennom samlingstypene. Skannings iteratoren brukes til å iterere over nøkler i en Redis -database. Det er en markørbasert iterator som returnerer to verdier per samtale, der den første er den oppdaterte markøren og den andre er en rekke elementer. SSCAN -kommandoen har samme oppførsel som skannekommandoen, men den er spesifikk å angi typer. Det kan skanne gjennom et sett basert på et mønster også. Kommandoen er også i stand til å begrense antallet returnerte elementer per samtale.