Redis Bitop

Redis Bitop

Fundamentos de Bitmaps Redis

Redis Bitmaps é outra maneira de tratar os dados do tipo string como uma coleção de bits ou vetores de bits. Portanto, a estrutura de dados subjacente dos bitmaps é uma string em que uma string é armazenada usando uma matriz de zeros e aqueles na memória do computador. Redis Bitmaps suporta a recuperação e a alternância do valor de bit de um determinado deslocamento em um bitmap. Além disso, ele fornece comandos para executar as operações bitwise, como e, ou não, e xor em várias strings que são armazenadas nas chaves determinadas.

Como mencionado, um valor de string que é armazenado no banco de dados Redis pode ser tratado como um bitmap. Podemos executar as operações bitwise em várias strings Redis armazenadas nas teclas dadas da seguinte forma:

E operação

A figura a seguir ilustra como funciona a operação e a operação em duas cordas dadas. Neste exemplo, usaremos as cordas A e B para realizar o bit e operação.

Ou operação

Vamos realizar o bitwise ou operação nas mesmas duas seqüências do exemplo anterior.

Como mostrado, o bitmap resultante é 1000011, que é a representação ASCII da letra C.

Operação XOR

A figura a seguir explica claramente como a operação XOR bit netwise opera nas mesmas duas seqüências:

Não operação

O operador NON é usado como um operador unário nas operações Bitwise Redis. Portanto, é preciso apenas um valor de string como entrada.

A operação Bitwise Not On String A retorna o valor \ xbe hexadecimal e nenhum valor de ASCII imprimível associado.

O comando bitop

O comando bitop foi introduzido pela Redis para executar as operações anteriores discutidas em uma ou várias strings (bitmaps) armazenadas nas chaves especificadas. Este comando opera com a complexidade do tempo O (n), onde n é o comprimento da corda mais longa na comparação que é bastante mais lenta que as outras operações de bitmap. Este comando executa a operação especificada e armazena o bitmap resultante (string) na chave de destino especificada.

A sintaxe do comando bitop é a seguinte:

Bitop bitise_operation destino_key bitmap_key [bitmap_key…]

O comando bitop retorna um valor inteiro que é o tamanho do bitmap resultante. O tamanho do bitmap resultante é igual ao tamanho do bitmap de entrada mais longo.

Em alguns casos, os bitmaps de entrada contêm strings em diferentes tamanhos. Então, o comando Bitop trata todas as outras seqüências de entrada que são mais curtas que as mais longas, como zero, com o tamanho da corda mais longa. Da mesma forma, as teclas de bitmap inexistentes são consideradas strings de byte zero com tamanhos iguais à sequência de entrada mais longa.

Caso de uso - usuários ativos de um site em um determinado dia

Vamos supor que o proprietário de um site esteja interessado nos usuários ativos que estão conectados a um site, semanalmente. Nesse caso, um bitmap é um candidato ideal para armazenar as visitas diárias. Cada usuário pode ser representado usando um deslocamento no bitmap. Além disso, bitmaps separados podem ser usados ​​por dia com um ID exclusivo, como mostrado na ilustração a seguir:

Vamos criar bitmaps para os três dias anteriores (domingo, segunda e terça -feira) que mantêm o status da visita de cada usuário. O comando set pode ser usado para criar cada bitmap da seguinte forma:

Criamos o primeiro bitmap que é identificado pela chave Visite: 2022: 08: 4: sol. Então, o primeiro usuário é identificado pelo deslocamento 0. Vamos supor que o usuário associado ao ID do usuário 0 visitou o site no domingo. Portanto, o deslocamento 0 é definido como 0 da seguinte forma:

Visita do setbit: 2022: 08: 4: Sun 0 1

Da mesma forma, o status da visita dos usuários associados aos IDs de usuário 1, 2, 3 e 4 é definido de acordo.

Visita do setbit: 2022: 08: 4: Sun 1 0
Visita do setbit: 2022: 08: 4: Sun 2 1
Visita do setbit: 2022: 08: 4: Sun 3 0
Visita do setbit: 2022: 08: 4: Sun 4 0

Vamos inspecionar os valores de bits para cada usuário usando o comando getbit da seguinte forma:

Visita Getbit: 2022: 08: 4: Sun 0
Visita Getbit: 2022: 08: 4: Sun 1
Visita Getbit: 2022: 08: 4: Sun 2
Visita Getbit: 2022: 08: 4: Sun 3
Visita Getbit: 2022: 08: 4: Sun 4

Da mesma forma, podemos criar os bitmaps para armazenar as visitas ao usuário na segunda e terça -feira que são identificadas pelas chaves Visite: 2022: 08: 5: seg e Visite: 2022: 08: 6: Ter.

O interesse do proprietário do site é levar os usuários que visitaram o site pelo menos um dia a partir de domingo, segunda ou terça -feira. Este tipo de informação pode ser obtido usando o comando bitop da seguinte maneira. A operação ou bit a bit é ideal para verificar os usuários que visitaram o site pelo menos um dia em relação aos três dias.

BITOP ou ATLEASEONEVISITUSER Visita: 2022: 08: 4: Sun Visite: 2022: 08: 5: Mon Visite: 2022: 08: 6: Ter

Realizamos o bitwise ou a operação no anterior criou três bitmaps. O bitmap resultante é armazenado na chave pelo menos oVisitUser. Vamos verificar a string ou bitmap resultante usando o comando get da seguinte forma:

Obtenha atleaseOneVisitUser

O bitmap devolvido ou o valor hexadecimal de String é \ xb0, que representa o sinal de graduação em ASCII. Vamos inspecionar cada bit da string que é armazenada na chave de destino AtleaseOneVisitUser Usando o comando getbit.

getbit ATLEASEONEVISITUSER 0
getbit ATLEASEONEVISITUSER 1
getbit ATLEASEONEVISITUSER 2
getbit ATLEASEONEVISITUSER 3
getbit ATLEASEONEVISITUSER 4

Como podíamos ver na saída, o bitmap resultante se parece com o seguinte:

1 | 0 | 1 | 1 | 0

O deslocamento 0 está associado ao ID do usuário 0, o deslocamento 1 é com o ID do usuário 1 e assim por diante. De acordo com o resultado da operação ou da operação, apenas três usuários visitaram o site pelo menos um dia a partir dos três dias mencionados. Os usuários armazenados nos compensações 1 e 4 que estão associados aos IDs de usuário 1 e 4 não visitaram o site no domingo, segunda -feira ou terça -feira.

Conclusão

Em resumo, o Redis Bitmaps é uma variedade de zeros e aqueles onde cada bit é identificado por um valor de deslocamento. Como discutido, o comando bitop é usado para executar operações bitwise, como ou e xor, e não sobre um bitmap ou string especificado. Conforme mostrado no caso de uso, a string resultante é armazenada na chave especificada. Este comando é bastante lento quando o tamanho da corda mais longa é aumentado. No geral, o comando bitop é útil para identificar os padrões de visitas ao site e estatísticas de uso de aplicativos de música durante um determinado período.