Redis bitop

Redis bitop

Fundamentals of Redis Bitmaps

Redis bitmaps er en annen måte å behandle dataene av strengtype som en samling av biter eller vektorer av biter. Derfor er den underliggende datastrukturen til bitmaps en streng der en streng lagres ved hjelp av en rekke nuller og de i datamaskinminnet. Redis bitmaps støtter gjenfinning og veksling av bitverdien til en gitt forskyvning i et bitmapp. Videre gir den kommandoer for å utføre bitvise operasjoner som og, eller ikke, og XOR på flere strenger som er lagret på gitte nøkler.

Som nevnt kan en strengverdi som er lagret i Redis -databasen behandles som en bitmap. Vi kan utføre bitvise operasjoner på flere Redis -strenger som er lagret på gitte nøkler som følger:

Og drift

Følgende figur illustrerer hvordan bitvis og operasjon på to gitte strenger fungerer. I dette eksemplet vil vi bruke strengene A og B til å utføre bitvis og operasjon.

Eller operasjon

La oss utføre bitvis eller operasjon på de samme to strengene fra forrige eksempel.

Som vist er den resulterende bitmappen 1000011 som er ASCII -representasjonen av bokstaven C.

XOR -operasjon

Følgende figur forklarer tydelig hvordan Bitwise XOR -operasjonen fungerer på de samme to strengene:

Ikke drift

Den ikke -operatøren brukes som en unarisk operatør i Redis Bitwise -operasjonene. Derfor tar det bare en strengverdi som inngang.

Bitvis ikke operasjonen på streng a returnerer \ xbe heksadesimal verdi og ingen tilhørende utskrivbar ASCII -verdi.

Bitop -kommandoen

Bitop -kommandoen er introdusert av Redis for å utføre de tidligere diskuterte bitvis operasjoner på en eller flere strenger (bitmaps) som er lagret på gitte nøkler. Denne kommandoen opererer med O (n) tidskompleksitet der n er lengden på den lengste strengen i sammenligningen som er ganske tregere enn de andre bitmap -operasjonene. Denne kommandoen utfører den spesifiserte bitvis -operasjonen og lagrer den resulterende bitmap (streng) på den spesifiserte destinasjonsnøkkelen.

Syntaksen til bitop -kommandoen er som følger:

Bitop bitwise_operation destination_key bitmap_key [bitmap_key…]

Bitop -kommandoen returnerer en heltallverdi som er størrelsen på den resulterende bitmappen. Størrelsen på den resulterende bitmappen er lik størrelsen på den lengste inngangen bitmap.

I noen tilfeller inneholder inngangsbitmappene strenger i forskjellige størrelser. Så bitop-kommandoen behandler alle de andre inngangsstrengene som er kortere enn den lengste som nullpadlet opp til størrelsen på den lengste strengen. Tilsvarende regnes de ikke-eksisterende bitmap-tastene som null-byte strenger med like store størrelser til den lengste inngangsstrengen.

Bruk sak - aktive brukere av et nettsted i en gitt dager

La oss anta at en nettstedseier er interessert i de aktive brukerne som er logget på et nettsted, ukentlig. I dette tilfellet er en bitmap en ideell kandidat til å lagre de daglige besøkene. Hver bruker kan være representert ved hjelp av en forskyvning i bitmappen. I tillegg kan separate bitmaps brukes per dag med en unik ID som vist i følgende illustrasjon:

La oss lage bitmaps for de tre foregående dagene (søndag, mandag og tirsdag) som holder hver brukers besøksstatus. Set -kommandoen kan brukes til å lage hver bitmapp som følger:

Vi oppretter den første bitmappen som er identifisert av nøkkelen Besøk: 2022: 08: 4: sol. Så den første brukeren blir identifisert av forskyvningen 0. La oss anta at brukeren som er tilknyttet bruker -ID 0 besøkte nettstedet på søndag. Derfor er forskyvningen 0 satt til 0 som følger:

Setbit Visit: 2022: 08: 4: Sun 0 1

Tilsvarende settes besøksstatusen til brukerne tilknyttet bruker -ID -er 1, 2, 3 og 4 deretter.

Setbit Visit: 2022: 08: 4: Sun 1 0
Setbit Visit: 2022: 08: 4: Sun 2 1
Setbit Visit: 2022: 08: 4: Sun 3 0
Setbit Visit: 2022: 08: 4: Sun 4 0

La oss inspisere bitverdiene for hver bruker som bruker GetBit -kommandoen som følger:

GetBit Visit: 2022: 08: 4: Sun 0
GetBit Visit: 2022: 08: 4: Sun 1
GetBit Visit: 2022: 08: 4: Sun 2
GetBit Visit: 2022: 08: 4: Sun 3
GetBit Visit: 2022: 08: 4: Sun 4

Tilsvarende kan vi lage bitmappene for å lagre brukerbesøkene mandag og tirsdag som er identifisert av nøklene Besøk: 2022: 08: 5: man og Besøk: 2022: 08: 6: Tir.

Nettstedseierens interesse er å få brukerne som besøkte nettstedet minst en dag fra søndag, mandag eller tirsdag. Denne typen informasjon kan fås ved hjelp av bitop -kommandoen som følger. OR -operasjonen er ideell for å sjekke brukerne som besøkte nettstedet minst en dag fra de tre dagene.

Bitop eller AtleaseOneVisituser Besøk: 2022: 08: 4: Solbesøk: 2022: 08: 5: Mon Besøk: 2022: 08: 6: Tir

Vi utførte bitvis eller operasjon på de tidligere opprettet tre bitmaps. Den resulterende bitmappen lagres på nøkkelen AtleastOnevisituser. La oss sjekke den resulterende strengen eller bitmappen ved å bruke kommandoen som følger:

Få AtleaseOnevisituser

Den returnerte bitmappen eller strengens heksadesimale verdi er \ xb0 som representerer graden ved hjelp av ASCII. La oss inspisere hver bit av strengen som er lagret på destinasjonsnøkkelen AtleaseOnevisituser Bruke GetBit -kommandoen.

GetBit AtleaseOneVisituser 0
GetBit AtleaseOneVisituser 1
GetBit AtleaseOneVisituser 2
GetBit AtleaseOneVisituser 3
GetBit AtleaseOneVisituser 4

Som vi kunne se i utgangen, ser den resulterende bitmappen ut som følgende:

1 | 0 | 1 | 1 | 0

Offset 0 er assosiert med bruker -ID 0, forskyvningen 1 er med bruker -ID 1, og så videre. I henhold til resultatet av bitvis eller operasjon, besøkte bare tre brukere nettstedet minst en dag fra de nevnte tre dagene. Brukerne som er lagret på forskyvninger 1 og 4 som er tilknyttet bruker -ID -er 1 og 4 har ikke besøkt nettstedet på søndag, mandag eller tirsdag.

Konklusjon

Oppsummert er Redis Bitmaps en rekke nuller og de der hver bit identifiseres med en forskyvningsverdi. Som diskutert brukes bitop -kommandoen til å utføre bitvis operasjoner som OR, og, XOR, og ikke over en spesifisert bitmap eller streng. Som vist i brukssaken lagres den resulterende strengen ved den spesifiserte tasten. Denne kommandoen er ganske treg når størrelsen på den lengste strengen økes. Totalt sett er bitop -kommandoen nyttig for å identifisere mønstrene på nettstedbesøk og musikkappbruksstatistikk over en gitt periode.