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

Шрифт
Фон

que fosse encerrado, as próximas tentativas de obter um valor da lista pelo comando BLPOP aguardaram durante 2 segundos e, em seguida, apresentaram

uma mensagem informando que a lista não cotinha nenhum item novo.

O nosso exemplo termina aqui. Resumidamente, tudo o que precisamos

para ter uma fila de mensagens ou tarefas funcionando no Redis foram dois

comandos. O primeiro foi o RPUSH, para enviar novos itens para o final da

lista (fila), e o segundo foi o BLPOP, que remove e retorna os itens da lista por ordem de chegada.

Exercícios sobre filas

1) O comando BRPOP funciona da mesma forma que o BLPOP; a única di-

ferença entre eles é que o BRPOP remove e retorna o último item (tail)

da lista. Utilize-o no exemplo de envio de e-mail e veja como a lista se

comporta com ele;

2) Altere o comando RPUSH pelo LPUSH no exemplo que popula a lista

fila:confirmar-usuario e veja como a lista se comporta com ele.

Referência rápida de comandos para filas (listas)

RPUSH chave valor [valor ...] adiciona um ou mais valo-

res ao final (tail) da lista definida pela chave;

RPUSHX chave valor funciona da mesma forma que o comando

RPUSH; a única diferença entre os dois é que o comando RPUSHX insere

um novo item somente em uma lista já existente. Caso a lista informada

como parâmetro não exista, o comando retorna o valor 0 e a lista não

é criada;

LPUSHX chave valor funciona da mesma forma que o comando

LPUSH; a única diferença entre os dois é que o LPUSHX insere um novo

item somente em uma lista já existente. Caso a lista informada como

parâmetro não exista, o comando retorna o valor 0 e a lista não é criada;

62

Casa

do Código

Capítulo 5. Redis no mundo real Parte 3

LPOP chave remove e retorna o primeiro (head) item da lista in-

formadas como parâmetro ou (nil) caso a lista esteja vazia;

BLPOP chave [chave] timeout bloqueia a conexão para re-

mover e retornar o primeiro item de uma das listas informadas como

parâmetro durante um tempo máximo definido no parâmetro timeout.

Caso o timeout seja definido como 0, a conexão fica bloqueada até que

um item de uma das listas informadas seja removido e retornado pelo

comando;

RPOP chave remove e retorna o ultimo (tail) item da lista informa-

das como parâmetro ou (nil) caso a lista esteja vazia;

BRPOP chave [chave] timeout bloqueia a conexão para re-

mover e retornar o último item de uma das listas informadas como

parâmetro durante um tempo máximo definido no parâmetro timeout.

Caso o timeout seja definido como 0, a conexão fica bloqueada até que

um item de uma das listas informadas seja removido e retornado pelo

comando.

5.3

Manipular relacionamento entre amigos e

seus grupos

Chegou o momento de conhecer um nova estrutura de dados suportada pelo

Redis. Esta estrutura é chamada de conjunto ou set. Ela é muito similar ao tipo lista, que conhecemos neste mesmo capítulo, sendo que sua principal

diferença é que um set não permite valores iguais. Isso é essencial quando

precisamos garantir que não teremos valores repetidos e, assim, não precisamos nos preocupar em verificar antes de inserir novo valor se este já existe no Redis.

Um SET é uma coleção não-ordenada de binary-safe strings, e além de

armazenar itens, existem outras operações que podem ser realizadas entre

conjuntos, como a interseção entre dois ou mais conjuntos, a diferença entre dois ou mais conjuntos e a união entre dois ou mais conjuntos.

Neste exemplo, vamos criar um código para manipular a conexão entre

amigos e seus grupos. Nada muito complexo, apenas operações como uma

63

5.3. Manipular relacionamento entre amigos e seus grupos

Casa do Código

pessoa adicionando outra como seu amigo e uma pessoa entrando para um

grupo de pessoas, operações comuns em redes sociais, por exemplo. A ideia

principal desse caso é conseguir extrair informações de forma fácil dos dados armazenados. Veja algumas informações que conseguiremos obter:

Saber quantas pessoas pertencem a cada grupo;

Listar as pessoas que são membros de um determinado grupo;

Saber se uma pessoa é membro de um determinado grupo;

Obter todos os relacionamentos de uma pessoa que também pertence

a determinado grupo.

Para isso, vamos precisar de dois conjuntos para representar nossos da-

dos: um para representar as pessoas e outro para representar os grupos. Veja a composição de cada chave que vai representar os dois conjuntos:

pessoas:{codigo-da-pessoa}:relacionamentos

grupos:{codigo-do-grupo}:membros

Vamos utilizar apenas um nome simples para representar cada pessoa e

cada grupo. Em um exemplo mais real, esses códigos poderiam ser um código

de uma chave de um hash que teria todos os dados referentes a uma pessoa

ou um grupo. Vamos começar com um exemplo para popular os relaciona-

mentos entre as pessoas, depois um outro para popular os membros de cada

grupo e, por último, outro para obter as informações que precisamos. Veja o primeiro exemplo a seguir:

public class ConjuntoDeRelacionamentoEntrePessoas {

public void adicionaAmigos(String pessoa, String[] amigos) {

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

0
Шрифт
Фон

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