rodrigo é membro do grupo (judo)? NÃO
gustavo é membro do grupo (livro)? SIM
cristiane é membro do grupo (cachorro)? SIM
andressa é membro do grupo (cachorro)? NÃO
carlos é membro do grupo (violao)? NÃO
Obter todos os relacionamentos de uma pessoa que também per-
tence a determinado grupo
Esta é a última parte do exemplo. Nesse ponto, vamos conhecer mais
um novo comando para o tipo de dados set. É o SINTER, que serve para comparar dois ou mais conjuntos e retornar os itens em comum entre eles.
No nosso exemplo, nós queremos comparar os relacionamentos de pessoas
com os membros de um grupo e verificar quais pessoas estão em ambos os
conjuntos. Vamos realizar isso em um programa Java:
public class CompararRelacionamentosComMembrosDoGrupo {
public void verAmigosDoGrupo(String pessoa, String grupo) {
String chavePessoa = String.format(
"pessoas:%s:relacionamentos", pessoa
);
String chaveGrupo = String.format(
"grupos:%s:membros", grupo
);
Jedis jedis = new Jedis("localhost");
Set<String> pessoas = jedis.sinter(chavePessoa,
chaveGrupo);
System.out.println(
74
Casa do Código
Capítulo 5. Redis no mundo real Parte 3
String.format(
"%s são amigos de %s " +
"e fazem também parte do grupo que gosta de %s",
pessoas.toString(),
pessoa,
grupo
)
);
}
public static void main(String[] args) {
CompararRelacionamentosComMembrosDoGrupo relacionamentos
= new CompararRelacionamentosComMembrosDoGrupo();
relacionamentos.verAmigosDoGrupo("rafael", "cachorro"); relacionamentos.verAmigosDoGrupo("rodrigo",
"video-game");
relacionamentos.verAmigosDoGrupo("andressa", "novela");
}
}
O resultado desse código Java é:
[tereza, rodrigo] são amigos de rafael e fazem também
parte
do grupo que gosta de cachorro
[rafael, carlos] são amigos de rodrigo e fazem também parte
do grupo que gosta de video-game
[cristiane] são amigos de andressa e fazem também parte
do grupo que gosta de novela
Com este último programa, encerramos nosso exemplo sobre a estrutura
de dados SET. Existem outros comandos interessantes que podem ser utili-
zados por conjuntos, e para estes deixarei que o leitor utilize-os nos exercícios propostos para esta seção.
75
5.3. Manipular relacionamento entre amigos e seus grupos
Casa do Código
Exercícios sobre conjuntos
1) O comando SMOVE move o elemento de um conjunto para outro; utilize-o
para mover o membro rodrigo do grupo video-game para o grupo
judo;
2) O comando SREM remove um ou mais elementos de um conjunto asso-
ciado a uma chave. Utilize-o para remover o membro novela do grupo
novela;
3) O comando SDIFF retorna os elementos do primeiro conjunto que não
existem nos outros conjuntos comparados. Utilize-o entre os relaciona-
mentos da pessoa cristiane e a pessoa gustavo e veja quais relacio-
namentos eles não têm em comum.
Referência rápida de comandos para conjuntos
SADD chave valor [valor ...] adiciona um ou mais valores
ao conjunto definido pela chave. Caso um valor já exista no conjunto,
este será ignorado;
SCARD chave retorna a quantidade de itens armazenados em um
conjunto;
SINTER chave [chave ...] retorna os elementos resultantes
entre uma intersecção dos conjuntos informados;
SISMEMBER chave valor retorna 1 se o valor informado existe
no conjunto informado pela chave, caso o valor não exista o comando
retorna o valor 0;
SMEMBERS chave retorna todos os elementos de um conjunto de-
finido pela chave informada.
76
Casa do Código
Capítulo 5. Redis no mundo real Parte 3
5.4
Próximos passos
Neste capítulo, nós conhecemos dois novos tipos de dados, o List e Set. Tam-bém aprendemos a criar filas no Redis e em que cenário podemos utilizá-las.
Esse que é um recurso muito útil e muito utilizado em diversos tipos de apli-cações.
No próximo capítulo, vamos ver a última parte de exemplos práticos uti-
lizando o Redis e conhecer o último tipo de dado suportado pelo Redis que
ainda não foi apresentado, o Sorted Set.
77
Capítulo 6
Redis no mundo real Parte 4
Chegamos na última parte de exemplos de uso reais com o Redis! Recapitu-
lando rapidamente, nós já conhecemos os tipos de dados string, hash e set.
Nesta parte, vamos conhecer o último tipo de dado fornecido pelo Redis, que é o sorted set.
6.1
Armazenando as vitórias dos usuários em
um jogo
Nesse exemplo, nós temos que armazenar as vitórias dos usuários de um jogo
online. A regra para armazenar o números de vitórias é bem simples: se o
jogador venceu, adicionamos 1 ponto ao seu número de vitórias ou retiramos
1 ponto caso o jogador tenha perdido.
Uma forma de fazer isso com o Redis é utilizar um hash para representar
6.1. Armazenando as vitórias dos usuários em um jogo
Casa do Código
o jogador e seus dados, que são seu nome e a suas vitórias (pontuação). Para ficar mais claro, vamos inserir um usuário conforme o seguinte código:
int codigoJogador = 1;
String nomeJogador = "Rafael";
String chave = String.format("jogador:%04d:codigo",
codigoJogador);
Jedis jedis = new Jedis("localhost");
long resultado1 = jedis.hset(chave, "nome", nomeJogador);