Redis Hscan

Redis Hscan
Redis Hashes er en samling strengfelt og strengverdipar. Det er en ideell kandidat å representere enheter i den virkelige verden i sinnet. Hashes er veldig minneffektive, og hver kan inneholde mer enn fire milliarder feltverdipar.

Siden Redis Hashes lar deg lagre enorme mengder feltverdipar, må iterasjon over denne typen samling også tilrettelegges. Så den markørbaserte inkrementelle iterasjonen er implementert med HSCAN-kommandoen. I denne guiden vil vi fokusere mer på HSCAN -kommandoen og dens brukssaker.

HSCAN -kommandoen

HSCAN -kommandoen brukes til å iterere over feltene og verdiene til en Redis -hasj lagret på en gitt nøkkel. Det blokkerer ikke serveren som nøkler eller smelter kommandoer. I stedet returnerer Hscan en del av elementene i hver iterasjon med en O (1) konstant tidskompleksitet. Den eneste ulempen med denne oppførselen er at HSCAN -kommandoen har en begrenset garanti for de returnerte hasjelementene på et gitt tidspunkt fordi hasj kan endres under iterasjonene. Det er ikke tilfelle med å blokkere kommandoer som Smembers, som garanterer at alle elementene vil bli returnert på et gitt tidspunkt.

Syntaks

Hscan -kommandoen stammer fra skannekommandoen. Derfor har hscan -kommandoen nesten samme syntaks som skanning bortsett fra at skannekommandoen ikke krever en nøkkel som det første argumentet fordi det itererer over nøklene som er lagret i den nåværende Redis -databasen.

HSCAN Hash_Key Cursor [Match Pattern] [Count Count_Per_Iteration]

Hash_key: Nøkkelen til hashen.

Markør: Markørverdien starter på 0 og slutter på 0 hvis en full iterasjon er fullført.

KAMP: Et mønster for å matche når du henter elementer i hver iterasjon. Bare de matchede elementene vil bli returnert til klienten.

TELLE: Antall elementer som vil bli returnert i hver iterasjon.

Det returnerte resultatsettet per iterasjon inneholder et par elementer. Den første er et 64-bits usignert heltall som representerer markøren som skal sendes inn i neste samtale. Bortsett fra det vil en rekke hasjfeltverdipar bli returnert.

Bruk sak 01: Få all informasjon fra en ansatt

La oss anta at et selskap trenger å opprettholde sine ansattedetaljer i en datalager med begrenset minneforbruk. Så Redis Hash er den ideelle datastrukturen som skal brukes i dette tilfellet fordi vi kommer til å representere ansattes gjenstander i den virkelige verden med sine egenskaper.

Først vil vi lage en Redis -hasj CompanyAempDetails: 1002 med noen feltverdipar som følger. Hmset-kommandoen kan brukes til å legge til flere feltverdipar til en hasj.

HMSET CompanyAempDetails: 1002 Empid 1002 EmpName "Jack Anwar" Empsalary $ 40000 Empaddress "23/4, Redis Avenue, NYC" EmpContact +9569492022 Empage 45 Empblood O + Empvehicle Mercedez Empdesignation "

La oss iterere over ansattes objekt og hente all informasjonen ved hjelp av HSCAN -kommandoen som følger. Vi må starte fra markøren 0.

Hscan CompanyAempdetails: 1002 0

Produksjon

Markørverdien er 0 i det returnerte resultatsettet, noe som betyr at alle elementene er returnert av den første iterasjonen. Fordi antall elementer er lite, representerer Redis-hashes disse elementene ved bruk av en enkeltfordeling pakket koding. Derfor, inntil en maksimal pakke størrelse eller antall elementer er oppfylt, vil kommandoen returnere alle elementene i hasj. Hvis tellingsargumentet er spesifisert, vil det bli ignorert i så fall. Dette kalles en full iterasjon fordi vi på slutten av den første iterasjonen fikk alle ni elementer. Hvis vi hadde titalls feltverdipar, ville de bli representert som et hasjbord i minnet. Så det vil ta flere iterasjoner å returnere alle elementene.

Bruk sak 02: Få besøkende telling for nettsteder hvis domene på toppnivå er ".com ”

HSCAN -kommandoen kan brukes til å filtrere ut de returnerte elementene basert på en mønsterkamp. Et kampargument bør sendes.

La oss anta at et selskap trenger å spore de besøkende tellingene for sine nettsteder. Vi kan opprette et hash abccompany: besøkende og legge til elementer som følger.

Hmset ABCCompany: Besøkende "www.ABC.ME "200000" www.htrs.com "123000" www.KDKDK.com "560000" www.QPSPS.LK "120000" www.Dioso.com "90000

Vi kan bruke Hgetall -kommandoen for å sjekke hvordan hasj ser ut.

Hgetall ABCCompany: Besøkende

Nå har selskapet et krav om å iterere over denne hasj og hente besøkende teller for nettsteder med “.com ” Toppnivå-domene. La oss gi kampargumentet til HSCAN -kommandoen som følger.

Hscan ABCCompany: Besøkende 0 Match *.com*

Dette bør ideelt sett returnere tre medlemmer av fem medlemmer, som vist i det følgende.

Konklusjon

Oppsummert er HSCAN-kommandoen brukt til å iterere over en samling av hasjfeltverdipar. Denne kommandoen er avledet fra foreldrescan -kommandoen, men med en liten endring i det første argumentet som skal sendes der Hscan tar hash -nøkkelen som det første argumentet. Som diskutert i brukssakene, kan HSCAN -kommandoen brukes på forskjellige måter ved å spesifisere match- og telleargumentene, hvor du kan hente elementer som samsvarer med et spesifikt mønster og begrense det returnerte elementantallet per iterasjon. Totalt sett kan HSCAN -kommandoen være nyttig når du henter elementer fra en samling uten å blokkere serveren eller klienten.