Redis Bitcount

Redis Bitcount

Redis datastrukturer

Redis er en implementering av neste nivå av tradisjonelle nøkkelverdibutikker. Det er ikke begrenset til å holde strengverdier for en gitt nøkkel. Redis kan lagre mer komplekse datastrukturer (typer) som lister, hasj, sett og bitmaps (bit -matriser). Strengdatatypen er fremdeles tilgjengelig i Redis. Det har blitt brukt til å implementere noen av disse komplekse datastrukturoperasjonene.

Hva er redis bitmaps?

Bitmappen er ikke en naturlig datatype i Redis. Den underliggende implementeringen er basert på strengdatatypen. Det er et sett med funksjonaliteter bygget på strengdatatypen. Den enkleste måten å forstå en bitmapp er å tenke på det som en rekke biter.

Som nevnt ovenfor, er dette en strengrepresentasjon med BIT -operasjonsmuligheter. Biten er den minste lagringsstørrelsen inne i en datamaskin. Derfor kan hver bit lagre 1 eller 0 på et gitt tidspunkt.

Maksimal lengde på en redis -streng er 512 MB. Hvis vi konverterer denne verdien til biter, er den omtrent 4 milliarder biter som er mer enn nok å bruke i en virkelig applikasjon i verden. Vi kaller array -indeksen “Offset” i Redis Bitmaps. La oss se på følgende eksempel.

Bitmap -operasjoner

Det er to hovedtyper av operasjoner assosiert med redis bitmaps. Enkeltbitsoperasjonene utføres på en bestemt bit, for eksempel å få en verdi eller angitt verdi. Det er en annen type operasjon som utføres på en gruppe biter, for eksempel Bitcount.

Bitcount -kommandoen

Bitcount-kommandoen er en batch-type operasjon. Det teller antall forekomster av “1” i en gitt bitmap eller streng. Vi kaller dette "befolkningstelling" eller telling av faste biter.

Syntaks

1
Bitcount Your_key [Interal_Start Interal_end] [BYTE | BIT]

Din_key: Dette er nøkkelen til strengen eller bitmappen. Det er en obligatorisk parameter.

Intervall_start, intervall_end: Disse to parametrene spesifiserer området ved å bruke start- og sluttindeksene. Disse to parametrene er valgfrie.

Byte eller bit: Denne parameteren spesifiserer intervallstart og slutt som en byteindeks eller bitindeks. Denne parameteren er valgfri. Som standard brukes byte.

Eksempel 01

La oss lage et nøkkel "eksempel1" og angi verdiene til andre og fjerde bits til 1. Vi bruker Redis setbit kommando her.

1
2
3
setbit eksempel1 2 1
setbit eksempel1 4 1

Produksjon:

La oss bekrefte den opprettede bitmap -indeksverdien ved hjelp av Redis getbit kommando.

1
2
3
getbit eksempel1 2
getbit eksempel1 4

Produksjon:

2. og fjerde biter er satt til 1 som forventet.

La oss bruke Bitcount Kommando for å telle antall set-bits eller 1s i eksemplet1 bitmap.

1
BitCount eksempel1

Produksjon:

Eksempel1 bitmap ser ut som følgende.

0 0 1 0 1

Som du kan se, er det andre og fjerde forskyvninger satt til 1. Derav Bitcount Kommandoutgangen skal være 2 som ovenfor.

Eksempel 02

La oss opprette et nytt nøkkeleksempel2 og tilordne strengen “a.”Strengen A er representert med 8 biter (1 byte), som vist i det følgende.

0 1 0 0 0 0 0 1
1
sett eksempel2 "A"

Produksjon:

La oss bruke Bitcount kommando for å sjekke antall faste biter. Siden vi fikk 1. og 7. bit satt til 1, Bitcount Kommandoutgangen skal være 2.

1
BitCount eksempel2

Produksjon:

Normalt Bitcount Kommandokontroller alle byteene i matrisen. I noen scenarier kan det være en overflødig prosess å undersøke alle byte i en bitmapp eller streng. Derfor kan vi spesifisere et område for å utføre Bitcount operasjon som vist i det følgende.

1
Bitcount Key Start_index End_Index

Som standard, den start_index og end_index Parameterverdiene er basert på byteindekser. La oss prøve dette i følgende eksempel.

Eksempel 03

Vi oppretter en ny nøkkel som heter Eksempel3 og tildeler verdien “AB.”

1
sett eksempel3 "AB"

Eksempel3 -strengen skal se ut som følgende.

0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
| EN | B

De første 8 bitene representerer bokstaven a og de andre 8 bitene representerer bokstaven B. Strengen “AB” tar 2 byte. La oss bruke BitCount -kommandoen for å telle antall faste biter for et gitt intervall.

1
BitCount eksempel3 0 0

Vi har spesifisert både start- og sluttbyteindekser som 0 i kommandoen ovenfor. Det betyr at den bare vil telle 1 -er i første byte (8 biter). Derfor bør utgangsverdien være 2.

Produksjon:

Hvis vi spesifiserer både start- og sluttindeksene som 1, vil BitCount -kommandoen telle satte biter bare i andre byte (andre 8 biter), som representerer bokstaven B. Det skal være to igjen.

1
BitCount eksempel3 1 1

Produksjon:

Vi kan hente alle faste biter i strengen “AB” ved å spesifisere området fra 0. byte til 1. byte. Utgangen skal være fire siden vi fikk fire 1 -er i hele strengen.

1
BitCount eksempel3 0 1

Produksjon:

De Bitcount Kommando lar brukere spesifisere intervallet ved å bruke BIT -indeksen. Strengen “AB” har 16 biter, som vist i illustrasjonen ovenfor. Derfor vil intervallet minimums- og maksindekser være henholdsvis 0 og 15. Vi må spesifisere dette eksplisitt til Redis -kommandoen ved å bruke BIT argument. Og så Bitcount Kommandoen vil behandle start- og sluttindekser som litt indeks.

La oss telle setbits fra 1. bit (0. indeks) til 4. bit (3. indeks)

1
BitCount eksempel3 0 3 bit

Legg merke til det nylig bestått BIT argument. Nå undersøker den de faste bitene fra 0 til 3. bit indeks. Utgangen skal være en.

0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
|< = = = > |
Bare 1 settbit er i dette området

Produksjon:

Deretter vil vi gi intervallet fra 1. bit (andre bitindeks) til 10. bit (9. bitindeks).

1
BitCount eksempel3 0 9 bit
0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
|< = = = = = = = = = = > |
Bare 3 settbiter er i dette området

I følge illustrasjonen ovenfor, skal utdata være 3.

Produksjon:

Konklusjon

Redis kan lagre forskjellige typer datastrukturer for en bestemt nøkkel. Bitmaps er en av de nyttige datastrukturene som Redis støtter. Den underliggende implementeringen er en strengrepresentasjon med bitmap -operasjoner støttet. Bitcount er en Redis -kommando som kan brukes til å telle antall setbiter i en gitt bitmap eller streng.