Redis Bitcount

Redis Bitcount

Estruturas de dados Redis

Redis é uma implementação de próximo nível das lojas tradicionais de valor-chave. Não se limita a manter valores de string para uma determinada chave. Redis pode armazenar estruturas de dados mais complexas (tipos), como listas, hashes, conjuntos e bitmaps (matrizes de bits). O tipo de dados da string ainda está disponível em redis. Foi usado para implementar algumas dessas operações complexas de estrutura de dados.

O que são Redis Bitmaps?

O bitmap não é um tipo de dados nativo em redis. Sua implementação subjacente é baseada no tipo de dados da string. É um conjunto de funcionalidades construídas no tipo de dados da string. A maneira mais fácil de entender um bitmap é pensar nisso como uma variedade de bits.

Como mencionado acima, esta é uma representação de string com recursos de operação de bits. A parte é o menor tamanho de armazenamento dentro de um computador. Portanto, cada bit pode armazenar 1 ou 0 em um determinado momento.

O comprimento máximo de uma corda Redis é 512MB. Se convertermos esse valor em bits, são cerca de 4 bilhões de bits, o que é mais do que suficiente para usar em um aplicativo do mundo real. Chamamos o índice de matriz de "deslocamento" em Redis Bitmaps. Vamos dar uma olhada no exemplo seguinte.

Operações de bitmap

Existem dois tipos principais de operações associados ao Redis Bitmaps. As operações de bits únicas são realizadas com um bit específico, como obter um valor ou valor definido. Existe outro tipo de operação que é executado em um grupo de bits, como o BitCount.

O comando bitcount

O comando BitCount é uma operação do tipo lote. Conta o número de ocorrências de "1" s em um determinado bitmap ou string. Chamamos isso de "contagem populacional" ou contagem de bits definidos.

Sintaxe

1
Bitcount your_key [interval_start interval_end] [byte | PEDAÇO]

Sua chave: Esta é a chave da string ou bitmap. É um parâmetro obrigatório.

Interval_start, interval_end: Esses dois parâmetros especificam o intervalo usando os índices de partida e final. Esses dois parâmetros são opcionais.

Byte ou bit: Este parâmetro especifica o início do intervalo e o fim como um índice de bytes ou índice de bits. Este parâmetro é opcional. Por padrão, o byte é usado.

Exemplo 01

Vamos criar uma chave "Exemplo1" e definir os valores do segundo e quarto bits como 1. Estaremos usando o Redis setbit comando aqui.

1
2
3
Setbit Exemplo1 2 1
Setbit Exemplo1 4 1

Saída:

Vamos verificar o valor do índice de bitmap criado usando Redis getbit comando.

1
2
3
getbit Exemplo1 2
getbit Exemplo1 4

Saída:

Os 2º e 4º bits são definidos como 1 como esperado.

Vamos usar o BitCount comando para contar o número de conjuntos ou 1s no exemplo1 bitmap.

1
Exemplo de bitcount1

Saída:

O exemplo1 bitmap se parece com o seguinte.

0 0 1 0 1

Como você pode ver, o 2º e o 4º compensações são definidos como 1. Daí o BitCount A saída de comando deve ser 2 como acima.

Exemplo 02

Vamos criar um novo exemplo chave2 e atribuir a string “a.”A sequência A é representada por 8 bits (1 byte), como mostrado no seguinte.

0 1 0 0 0 0 0 1
1
definir exemplo2 "a"

Saída:

Vamos usar o BitCount comando para verificar o número de bits definidos. Desde que conseguimos o 1º e o 7º bits para 1, o BitCount A saída de comando deve ser 2.

1
BitCount Exemplo2

Saída:

Normalmente, o BitCount O comando verifica todos os bytes contidos na matriz. Em alguns cenários, pode ser um processo redundante examinar todos os bytes em um bitmap ou string. Portanto, podemos especificar um intervalo para executar o BitCount operação como mostrado no seguinte.

1
key bitcount start_index end_index

Por padrão, o start_index e end_index Os valores dos parâmetros são baseados em índices de bytes. Vamos tentar isso no exemplo seguinte.

Exemplo 03

Estaremos criando uma nova chave chamada Exemplo3 e atribuindo o valor “AB.”

1
definir exemplo3 "ab"

A sequência do exemplo3 deve parecer o seguinte.

0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
| A | B

Os 8 primeiros bits representam a letra A e os segundos 8 bits representam a letra B. A string "AB" pega 2 bytes. Vamos usar o comando bitcount para contar o número de bits definidos para um determinado intervalo.

1
Exemplo de BitCount3 0 0

Especificamos os índices de início e final de bytes como 0 no comando acima. Isso significa que contará o 1S no primeiro byte (8 bits). Portanto, o valor da saída deve ser 2.

Saída:

Se especificarmos os índices de início e final como 1, o comando BitCount contará os bits apenas no segundo byte (segundo 8 bits), o que representa a letra B. Deve ser dois de novo.

1
Exemplo de BitCount3 1 1

Saída:

Podemos recuperar todos os bits definidos na string "AB" especificando o intervalo de 0th byte a 1st Byte. A saída deve ser quatro, pois temos quatro 1s em toda a corda.

1
Exemplo de BitCount3 0 1

Saída:

O BitCount O comando permite que os usuários especifiquem o intervalo usando o índice de bits. A string "AB" tem 16 bits, como mostrado na ilustração acima. Portanto, o intervalo mínimo e os índices máximos serão 0 e 15, respectivamente. Precisamos especificar isso explicitamente para o comando Redis usando o PEDAÇO argumento. Então o BitCount O comando tratará os índices de partida e final como um índice um bit.

Vamos contar os setbits do 1º bit (0º índice) ao 4º bit (3º índice)

1
BitCount Exemplo3 0 3 bits

Observe o recém -passado PEDAÇO argumento. Agora ele examina os bits definidos de 0 a 3ª Índice de bits. A saída deve ser uma.

0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
|< = = = > |
Apenas 1 bit de conjunto está neste intervalo

Saída:

Em seguida, daremos o intervalo do 1º bit (OTH Bit Index) ao 10º bit (índice de 9º bits).

1
BitCount Exemplo3 0 9 bits
0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
|< = = = = = = = = = = > |
Apenas 3 bits definidos estão neste intervalo

De acordo com a ilustração acima, a saída deve ser 3.

Saída:

Conclusão

Redis pode armazenar diferentes tipos de estruturas de dados para uma chave específica. Bitmaps é uma das estruturas de dados úteis que Redis suporta. A implementação subjacente é uma representação de string com operações de bitmap suportadas. O bitcount é um comando redis que pode ser usado para contar o número de bits definidos em um determinado bitmap ou string.