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

Шрифт
Фон

Casa do Código

Capítulo 4. Redis no mundo real Parte 2

um site foi visitada a cada dia. Vamos utilizar o exemplo de um blog chamado Tudo Sobre Redis, que irá conter algumas páginas:

/inicio

/contato

/sobre-mim

/todos-os-posts

/armazenando-dados-no-redis

O primeiro ponto que precisamos definir é a estrutura da chave que será

utilizada para armazenar os dados das estatísticas. Como nossos dados serão separados por dia, temos que utilizar a data na chave e também a página que recebeu a visita. Com essas informações podemos compor uma chave com a

seguinte estrutura:

pagina:[url da pagina]:[data]

Agora vejamos um exemplo de uma chave utilizando valores reais:

pagina:/inicio:12-11-2013

Com a estrutura da chave definida, fica fácil entender como funcionará

o armazenamento das estatísticas. Para isso, basta sempre incrementarmos o

valor da chave a cada respectivo acesso, algo bem comum de realizar. Pode-

ríamos fazer isso armazenando uma nova chave no Redis como o valor 1 no

primeiro acesso de cada página, e posteriormente a cada acesso obter ( GET) o valor da chave, somar 1 ao seu valor e armazená-lo novamente ( SET).

Embora pareça um processo simples de se realizar, seria necessário exe-

cutar dois comandos ( GET e SET) no Redis para cada acesso de página. Um

outro problema em realizar dessa forma é que isso não seria uma operação

atômica, e por isso estaria sujeita a problemas de condição de corrida (race conditions) [7].

Eis que surge o comando INCR. Utilizando-o, podemos incrementar o

valor de uma chave diretamente sem a necessidade de conhecer o seu valor

anterior e assim tornar a operação atômica. Este comando é classificado com um comando para o tipo de dado String, porque no Redis não existe o tipo

de dados Integer. Quando usamos esse comando, o Redis interpreta

o valor

33

4.2. Estatísticas de páginas visitadas

Casa do Código

da chave como um número inteiro de 64 bits com sinal, que significa que a

chave também suporta valores negativos.

Agora que conhecemos esse novo comando, vamos escrever uma aplica-

ção para realizar a tarefa determinada pelo nosso exemplo:

public class GerarEstatisticaDePaginasVisitadas {

public void gerarEstatistica(String pagina, String data) {

String chave = String.format("pagina:%s:%s", pagina, data);

Jedis jedis = new Jedis("localhost");

long resultado = jedis.incr(chave);

System.out.println(

String.format(

"página %s teve %d acesso(s) em %s",

pagina,

resultado,

data

)

);

}

public static void main(String[] args) {

String data = "02/09/2013";

String[] paginasVisitadas = {

"/inicio",

"/contato",

"/sobre-mim",

"/todos-os-posts",

"/armazenando-dados-no-redis"

};

GerarEstatisticaDePaginasVisitadas gerador =

new GerarEstatisticaDePaginasVisitadas();

gerador.gerarEstatistica(paginasVisitadas[0], data);

gerador.gerarEstatistica(paginasVisitadas[1], data);

gerador.gerarEstatistica(paginasVisitadas[2], data);

gerador.gerarEstatistica(paginasVisitadas[1], data);

gerador.gerarEstatistica(paginasVisitadas[1], data);

34

Casa do Código

Capítulo 4. Redis no mundo real Parte 2

}

}

O resultado do código é o seguinte:

página /inicio teve 1 acesso(s) em 02/09/2013

página /contato teve 1 acesso(s) em 02/09/2013

página /sobre-mim teve 1 acesso(s) em 02/09/2013

página /contato teve 2 acesso(s) em 02/09/2013

página /contato teve 3 acesso(s) em 02/09/2013

Simples, não? Vamos conhecer mais alguns comandos que podemos uti-

lizar para incrementar o valor de uma chave e também decrementar seu valor.

Embora eles não tenham uma aplicação prática para o contexto do exemplo

utilizado aqui, é importante conhecê-los e entender seu uso.

Imagine que precisamos decrementar o valor de uma das chaves que cria-

mos anteriormente. Isso pode ser feito de duas formas, sendo que a primeira é com o comando DECR, que decrementa o valor da chave em um número.

Vejamos um exemplo de uso desse pelo CLI:

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

"3"

redis 127.0.0.1:6379> DECR get pagina:/contato:02/09/2013

(integer) 2

redis 127.0.0.1:6379> DECR get pagina:/contato:02/09/2013

(integer) 1

No

primeiro

comando,

resgatamos

o

valor

da

chave

pagina:/contato:02/09/2013

que já tínhamos criado anterior-

mente. Na sequência, executamos o comando DECR nessa mesma chave e

seu valor foi decrementado para 2, e na segunda execução, o valor da chave

foi novamente decrementado para 1.

Uma outra forma de decrementar ou incrementar o valor de uma chave

é utilizando o comando

INCRBY. Esse comando se distingue dos ou-

tros, pois nele precisamos determinar o valor do incremento ou decre-

mento que será aplicado à chave. Vamos continuar usando a mesma chave

35

4.2. Estatísticas de páginas visitadas

Casa do Código

pagina:/contato:02/09/2013 e demonstrar o uso desse comando pelo

CLI conforme a sequencia de comandos a seguir:

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

"1"

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

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

0
Шрифт
Фон

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