Redis Bitcount

Redis Bitcount

Redis Data Structures

Redis è un'implementazione di livello successivo dei tradizionali negozi di valore chiave. Non si limita a tenere i valori di stringa per una determinata chiave. Redis può archiviare strutture di dati più complesse (tipi) come elenchi, hash, set e bitmap (array bit). Il tipo di dati String è ancora disponibile in Redis. È stato utilizzato per implementare alcune di queste complesse operazioni di struttura dei dati.

Cosa sono le bitmap Redis?

La bitmap non è un tipo di dati nativo in Redis. La sua implementazione sottostante si basa sul tipo di dati stringa. È un insieme di funzionalità basate sul tipo di dati stringa. Il modo più semplice per capire una bitmap è pensarla come una serie di bit.

Come accennato in precedenza, questa è una rappresentazione di stringa con funzionalità di funzionamento bit. Il bit è la dimensione di archiviazione più piccola all'interno di un computer. Quindi, ogni bit può archiviare 1 o 0 in un determinato momento.

La lunghezza massima di una stringa Redis è 512 MB. Se convertiamo questo valore in bit, sono circa 4 miliardi di bit che sono più che sufficienti da utilizzare in un'applicazione del mondo reale. Chiamiamo l'indice di array "offset" in Redis Bitmaps. Diamo un'occhiata al seguente esempio.

Operazioni bitmap

Esistono due tipi principali di operazioni associate alle bitmaps Redis. Le operazioni a bit singolo vengono eseguite su un bit specifico, come per ottenere un valore o un valore di impostazione. C'è un altro tipo di operazione che viene eseguito su un gruppo di bit, come BitCount.

Il comando bitcount

Il comando BitCount è un'operazione di tipo batch. Conta il numero di occorrenze di "1" s in una data bitmap o stringa. Chiamiamo questo "conteggio della popolazione" o conta dei bit set.

Sintassi

1
BitCount your_key [interval_start interval_end] [byte | MORSO]

La tua chiave: Questa è la chiave della stringa o della bitmap. È un parametro obbligatorio.

Intervallo_start, intervallo_end: Questi due parametri specificano l'intervallo utilizzando gli indici di avvio e finale. Questi due parametri sono opzionali.

Byte o bit: Questo parametro specifica l'inizio e la fine dell'intervallo come indice di byte o indice bit. Questo parametro è facoltativo. Per impostazione predefinita, viene utilizzato il byte.

Esempio 01

Creiamo un "esempio" chiave e impostiamo i valori del secondo e quarto bit su 1. Useremo il Redis Setbit comando qui.

1
2
3
SetBit Esempio1 2 1
setbit Esempio1 4 1

Produzione:

Verifichiamo il valore dell'indice Bitmap creato usando Redis getbit comando.

1
2
3
GetBit Esempio1 2
GetBit Esempio1 4

Produzione:

I 2 ° e il 4 ° bit sono impostati su 1 come previsto.

Usiamo il Bitcount comando per contare il numero di set-bit o 1s nella bitmap di esempio1.

1
BitCount Esempio1

Produzione:

La bitmap di esempio1 sembra il seguente.

0 0 1 0 1

Come puoi vedere, il 2 ° e il 4 ° offset sono impostati su 1. Quindi il bitcount L'output del comando dovrebbe essere 2 come sopra.

Esempio 02

Creiamo un nuovo esempio chiave2 e assegniamo la stringa "a."La stringa A è rappresentata da 8 bit (1 byte), come mostrato nei seguenti.

0 1 0 0 0 0 0 1
1
Imposta Esempio2 "A"

Produzione:

Usiamo il bitcount comando per controllare il numero di bit set. Da quando abbiamo ottenuto il 1 ° e il 7 ° bit set su 1, il bitcount L'output del comando dovrebbe essere 2.

1
Esempio BitCount2

Produzione:

Normalmente, il bitcount comando controlla tutti i byte contenuti nell'array. In alcuni scenari, potrebbe essere un processo ridondante esaminare tutti i byte in una bitmap o una stringa. Quindi, possiamo specificare un intervallo per eseguire il bitcount operazione come mostrato nel seguente.

1
Tasto BitCount Start_Index end_index

Per impostazione predefinita, il start_index ed end_index I valori dei parametri si basano su indici di byte. Proviamo questo nel seguente esempio.

Esempio 03

Creeremo una nuova chiave denominata Esempio3 e assegneremo il valore “AB."

1
Imposta Esempio3 "AB"

La stringa di esempio3 dovrebbe apparire come quanto segue.

0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
| UN | B

I primi 8 bit rappresentano la lettera A e i secondi 8 bit rappresentano la lettera B. La stringa "AB" prende 2 byte. Usiamo il comando bitcount per contare il numero di bit set per un determinato intervallo.

1
BitCount Esempio3 0 0

Abbiamo specificato sia gli indici di byte di avvio e fine come 0 nel comando sopra. Ciò significa che conta gli 1s nel primo byte (8 bit). Pertanto, il valore di output dovrebbe essere 2.

Produzione:

Se specifichiamo sia gli indici di avvio e finale come 1, il comando BitCount conta i bit set solo nel secondo byte (secondo 8 bit), che rappresenta la lettera B. Dovrebbero essere di nuovo due.

1
BitCount Esempio3 1 1

Produzione:

Possiamo recuperare tutti i bit set nella stringa "AB" specificando l'intervallo dal 0 ° byte al primo byte. L'output dovrebbe essere quattro poiché abbiamo ottenuto quattro 1 nell'intera stringa.

1
BitCount Esempio3 0 1

Produzione:

IL bitcount Il comando consente agli utenti di specificare l'intervallo utilizzando l'indice bit. La stringa "AB" ha 16 bit, come mostrato nell'illustrazione sopra. Pertanto, l'intervallo minimo e gli indici massimi saranno rispettivamente 0 e 15. Dobbiamo specificarlo esplicitamente al comando Redis usando il MORSO discussione. Poi il bitcount Il comando tratterà gli indici di avvio e fine come un indice bit.

Contiamo i setbit da 1 ° bit (0 ° indice) al 4 ° bit (3 ° indice)

1
BitCount Esempio3 0 3 bit

Notare il nuovo passato MORSO discussione. Ora esamina i bit impostati dal 0 ° al 3 ° bit indice. L'output dovrebbe essere uno.

0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
|< = = = > |
Solo 1 bit set è in questa gamma

Produzione:

Successivamente, daremo l'intervallo da 1 ° bit (oth bit indice) al 10 ° bit (9 ° bit indice).

1
BitCount Esempio3 0 9 bit
0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
|< = = = = = = = = = = > |
Solo 3 bit set sono in questa gamma

Secondo la suddetta illustrazione, l'output dovrebbe essere 3.

Produzione:

Conclusione

Redis può archiviare diversi tipi di strutture di dati per una chiave specifica. Le bitmap sono una delle utili strutture di dati che Redis supporta. L'implementazione sottostante è una rappresentazione di stringa con operazioni BitMap supportate. Il BitCount è un comando Redis che può essere utilizzato per contare il numero di bit set in un determinato bitmap o stringa.