Lazoti Rodrigo - Armazenando dados com Redis стр 11.

Шрифт
Фон

(integer) 5

redis 127.0.0.1:6379> INCRBY pagina:/contato:02/09/2013 -2

(integer) 3

Foi usado inicialmente o comando GET apenas para verificar o valor da

chave pagina:/contato:02/09/2013. Em seguida, usamos o comando

INCRBY para incrementar em 4 e depois decrementar em 2 o valor da chave.

Repare que até agora todas as operações que realizamos foram feitas uti-

lizando números inteiros, mas e se quisermos incrementar ou decrementar

o valor em 0.5? Isso também foi pensado e disponibilizado através do co-

mando INCRBYFLOAT. O comando INCRBYFLOAT interpreta o valor (que

é um String) da chave como um número de ponto flutuante. Vejamos seu

exemplo de uso:

redis 127.0.0.1:6379> GET pagina:/contato:02/09/2013

"3"

redis 127.0.0.1:6379>

INCRBYFLOAT pagina:/contato:02/09/2013 2.789

"5.789"

redis 127.0.0.1:6379>

INCRBYFLOAT pagina:/contato:02/09/2013 -2.789

"3"

Se esquecermos por um minuto que utilizamos um número em

ponto flutuante para incrementar e depois decrementar o valor da chave

pagina:/contato:02/09/2013, não temos nada de muito diferente

quando comparamos esse exemplo de uso do comando INCRBYFLOAT com

o exemplo do comando INCRBY.

36

Casa do Código

Capítulo 4. Redis no mundo real Parte 2

Referência rápida de comandos para Incremento/Decremento

INCR chave incrementa (adiciona 1) ao valor (número inteiro) da

chave;

INCRBY chave incremento incrementa ou decrementa o valor

(número inteiro) da chave conforme o valor do incremento;

INCRBYFLOAT chave incremento incrementa ou decrementa o

valor (número de ponto flutuante) da chave conforme o valor do incre-

mento.

4.3

Estatísticas de usuários únicos por data

Você vê mais um exemplo de estatísticas e logo pensa no comando INCR

ou INCRBY, certo? Errado! Neste exemplo, vamos ver um recurso muito

interessante no Redis, que é chamado de Redis Bitmap. Bitmaps são, em sua essência, um array de bits [2], ou simplificando, um array composto por zeros e uns que podem ser usados como uma representação de determinados tipos

de informação. O Redis fornece diversos comandos para manipular Bitmaps,

entre eles comandos para definir e obter os bits de uma posição (índice) do array definido em uma chave.

Esse exemplo difere do exemplo apresentado na seção 4.2, pois agora ire-

mos armazenar os dados levando em consideração o usuário e a data em que o

usuário acessou o site, enquanto o outro exemplo apenas considerava as visitas realizadas em cada página. A principal diferença é que agora nosso volume de dados armazenados no Redis será infinitamente maior quando comparado

com o outro exemplo, isso porque agora os dados não possuem limites e vão

aumentar de acordo com a quantidade de dias, enquanto o outro tinha dados

baseados apenas na quantidade de páginas do site.

Um outro ponto interessante que devemos entender é que no exemplo

anterior 4.2, o valor armazenado em cada chave já representava o total de

visitas de cada página e não foi necessário efetuar nenhuma outra operação.

Já nesse exemplo os dados são armazenados por cada dia e serão processados

conforme nossa necessidade.

37

4.3. Estatísticas de usuários únicos por data

Casa do Código

E é exatamente por conta desse grande volume de dados (chaves) que te-

remos que armazenar no Redis e das operações que teremos que realizar sobre esses dados que iremos usar Bitmaps, pois ao armazenar os dados de forma

binária, a quantidade de memória ou espaço em memória utilizada para re-

presentar os dados é bem menor. Uma outra característica muito importante

é que cálculos efetuados com comandos de BITMAP são extremamente rápi-

dos e por este motivo é que Bitmaps são utilizados para gerar estatísticas em tempo real sem necessitar de muito recurso de hardware.

Mas ao invés de partirmos diretamente para o exemplo proposto, vamos

executar alguns comandos através do CLI para que o uso de BITMAPS fique

mais claro. Veja a seguir:

127.0.0.1:6379> SETBIT cliques:anuncio:CASADOCODIGO 1000 1

(integer) 0

127.0.0.1:6379> SETBIT cliques:anuncio:CASADOCODIGO 1001 1

(integer) 0

127.0.0.1:6379> SETBIT cliques:anuncio:CASADOCODIGO 1002 1

(integer) 0

A primeira coisa que temos que conhecer é o comando SETBIT. Ele

pode definir ou remover o bit de um offset em um valor armazenado em

uma chave. Um pouco confuso, não? Vamos entendê-lo através do exem-

plo. A princípio, esse comando é parecido com o SET, ou seja, ele de-

fine um valor para uma determinada chave. A chave no nosso exemplo é

cliques:anuncio:CASADOCODIGO e ela representa todos os usuários úni-

cos que, de fato, clicaram no anúncio chamado CASADOCODIGO em uma pá-

gina qualquer do nosso site.

38

Casa do Código

Capítulo 4. Redis no mundo real Parte 2

Cuidado com valores de offsets grandes

Ao utilizar Redis Bitmaps, é possível armazenar dados para milhões

de offsets em pouca quantidade de memória, que no geral pode chegar

em alguns megabytes. É necessário tomar cuidado com valores de off-

sets muito grandes pois, para determinados tamanhos, o Redis precisará

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке