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

Шрифт
Фон

feira e outro no sábado. Embora as informações fornecidas pelo serviço web

da outra empresa sejam dinâmicas, elas são alteradas apenas duas vezes em

um período de uma semana.

Para melhorar o tempo de resposta do site Resultados de Loterias e não fazer consultas desnecessárias ao serviço web da outra empresa, podemos

fazer uma única requisição desses dados no serviço web externo e depois

armazená-los no Redis como um cache interno até que o próximo sorteio

seja realizado para, assim, o site novamente buscar através do serviço web os novos dados.

Para este exemplo, vamos definir que o serviço externo retorne um JSON

conforme o seguinte exemplo:

{

"data": "21-09-2013",

"numeros": [2, 13, 24, 41, 42, 44],

"ganhadores": 2

}

Manipular JSON em Java

Vou omitir a parte de como fazer a conversão de um JSON para um

objeto Java, mas poderíamos utilizar, por exemplo, a biblioteca GSON

para esse propósito. Você pode obter mais informações sobre essa bibli-

oteca através do link:

https://code.google.com/p/google-gson/

Neste primeiro exemplo, vamos utilizar apenas os números do sorteio ob-

tidos pelo JSON anterior. Vamos ver como poderíamos fazer para armazenar

esses números através de uma aplicação Java:

String chave = "resultado:megasena";

String numerosDoUltimoSorteio = "2, 13, 24, 41, 42, 44";

17

3.2. Encontrando as chaves armazenadas

Casa do Código

Jedis jedis = new Jedis("localhost");

String resultado = jedis.set(chave, numerosDoUltimoSorteio);

System.out.println(resultado);

Até aqui não vimos nada muito diferente do que fizemos no capítulo 1

ou 2. Utilizamos o comando SET para armazenar os números em uma chave chamada resultado_megasena e também podemos utilizar o comando GET

para obter o números armazenados nesta mesma chave.

3.2

Encontrando as chaves armazenadas

Continuando com o exemplo do nosso site Resultados de Loterias, além de exibirmos o último sorteio realizado na página inicial, temos também que

ter uma página com o histórico dos resultados anteriores. Nesta página, será possível filtrar os resultados por mês e ano do sorteio, mas para isso temos

que mudar um pouco a estrutura da chave que utilizamos no exemplo anterior.

Antes, nossa chave era definida como resultado:megasena, mas

agora precisamos armazenar vários resultados e para conseguirmos isso

precisamos melhorar a estrutura da nossa chave. A forma mais prática é

inserir a data do sorteio na chave para que ela fique da seguinte forma:

resultado:dd-mm-yyyy:megasena, onde dd é o dia, mm o mês e yyyy

o ano do sorteio. Assim conseguimos ter uma chave para cada sorteio.

18

Casa do Código

Capítulo 3. Redis no mundo real Parte 1

Convenção para nomear chaves no Redis

Utilizar : para compor um namespace na chave é uma conven-

ção muito utilizada no Redis, sendo que um formato de chave muito

comum assemelha-se com tipo-de-objeto:identificador:nome-campo.

Por exemplo, imagine uma chave utilizando esse formato que represente

o nome dos usuários de um sistema. Essa chave poderia ser da seguinte

forma:

usuario:Rodrigo Lazoti:nome

Sendo que usuario é o tipo de objeto, o valor Rodrigo Lazoti

representa o nome do usuário e nome é o nome do campo que dá signi-

ficado ao valor armazenado nesta chave.

Vamos criar um novo exemplo que irá inserir quatro sorteios no Redis

utilizando a nova composição de chave que foi definida. Veja o exemplo a

seguir:

String dataDoSorteio1 = "04-09-2013";

String numerosDoSorteio1 = "10, 11, 18, 42, 55, 56";

String chave1 = String.format("resultado:%s:megasena",

dataDoSorteio1);

String dataDoSorteio2 = "07-09-2013";

String numerosDoSorteio2 = "2, 21, 30, 35, 45, 50";

String chave2 = String.format("resultado:%s:megasena",

dataDoSorteio2);

String dataDoSorteio3 = "21-09-2013";

String numerosDoSorteio3 = "2, 13, 24, 41, 42, 44";

String chave3 = String.format("resultado:%s:megasena",

dataDoSorteio3);

String dataDoSorteio4 = "02-10-2013";

String numerosDoSorteio4 = "7, 15, 20, 23, 30, 41";

String chave4 = String.format("resultado:%s:megasena",

19

3.2. Encontrando as chaves armazenadas

Casa do Código

dataDoSorteio4);

Jedis jedis = new Jedis("localhost");

String resultado = jedis.mset(

chave1, numerosDoSorteio1,

chave2, numerosDoSorteio2,

chave3, numerosDoSorteio3,

chave4, numerosDoSorteio4

);

System.out.println(resultado);

Neste exemplo, foi usado o comando MSET, enquanto no exemplo ante-

rior usamos o comando SET. A única diferença entre o SET e o MSET é que

o MSET aceita vários conjuntos de chave-valor como parâmetro enquanto o

SET aceita apenas um único conjunto de chave-valor.

Se o comando anterior funcionou da forma esperada, o resultado apresen-

tado pelo exemplo será um OK. Agora já temos quatro sorteios para compor nossa página de histórico, mas ainda precisamos criar uma forma de filtrar

esses itens. O Redis possui um comando chamado KEYS, que é usado para

fazer buscar de chaves com base em um determinado padrão (pattern) que é

passado como parâmetro para o comando.

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

0
Шрифт
Фон

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