é o SCARD e vamos usá-lo para saber o total de pessoas que pertencem a cada grupo, pois ele retorna a cardinalidade ou a quantidade de elementos em um
conjunto. Veja seu uso no seguinte exemplo:
public class TotalDePessoasPorGrupo {
public void mostrarQuantidadeDeMembros(String grupo) {
String chave = String.format("grupos:%s:membros", grupo);
Jedis jedis = new Jedis("localhost");
long resultado = jedis.scard(chave);
System.out.println(
String.format("Grupo (%s) tem %d membros", grupo,
resultado)
);
}
public static void main(String[] args) {
TotalDePessoasPorGrupo grupo =
new TotalDePessoasPorGrupo();
grupo.mostrarQuantidadeDeMembros("video-game");
grupo.mostrarQuantidadeDeMembros("judo");
grupo.mostrarQuantidadeDeMembros("natacao");
grupo.mostrarQuantidadeDeMembros("kung-fu");
grupo.mostrarQuantidadeDeMembros("violao");
grupo.mostrarQuantidadeDeMembros("ciclismo");
grupo.mostrarQuantidadeDeMembros("cachorro");
grupo.mostrarQuantidadeDeMembros("moto");
70
Casa do Código
Capítulo 5. Redis no mundo real Parte 3
grupo.mostrarQuantidadeDeMembros("carro");
grupo.mostrarQuantidadeDeMembros("livro");
grupo.mostrarQuantidadeDeMembros("novela");
}
}
O resultado do código anterior é muito parecido com o resultado de
quando incluímos os grupos. Veja:
Grupo (video-game) tem 4 membros
Grupo (judo) tem 1 membros
Grupo (natacao) tem 2 membros
Grupo (kung-fu) tem 1 membros
Grupo (violao) tem 1 membros
Grupo (ciclismo) tem 1 membros
Grupo (cachorro) tem 3 membros
Grupo (moto) tem 1 membros
Grupo (carro) tem 2 membros
Grupo (livro) tem 2 membros
Grupo (novela) tem 3 membros
Listar as pessoas que são membros de um determinado grupo
O próximo exemplo que vamos criar é para listar as pessoas que são mem-
bros de um determinado grupo. Para fazermos isso, precisamos conhecer um
novo comando chamado SMEMBERS, que recebe como parâmetro o nome
(chave) do conjunto (set) que queremos acessar e retorna todos os elementos contidos no conjunto. Vamos verificar seu uso no exemplo a seguir:
public class ListarPessoasDosGrupos {
public void listarMembros(String grupo) {
String chave = String.format("grupos:%s:membros", grupo);
Jedis jedis = new Jedis("localhost");
Set<String> membros = jedis.smembers(chave);
System.out.println(
String.format(
71
5.3. Manipular relacionamento entre amigos e seus grupos
Casa do Código
"Membros do grupo (%s): %s", grupo,
membros.toString()
)
);
}
public static void main(String[] args) {
ListarPessoasDosGrupos grupos =
new ListarPessoasDosGrupos();
grupos.listarMembros("video-game");
grupos.listarMembros("judo");
grupos.listarMembros("natacao");
grupos.listarMembros("kung-fu");
grupos.listarMembros("violao");
grupos.listarMembros("ciclismo");
grupos.listarMembros("cachorro");
grupos.listarMembros("moto");
grupos.listarMembros("carro");
grupos.listarMembros("livro");
grupos.listarMembros("novela");
}
}
O resultado desse exemplo é:
Membros
do grupo (video-game): [gustavo, rafael, carlos,
rodrigo]
Membros do grupo (judo): [rafael]
Membros do grupo (natacao): [rafael, cristiane]
Membros do grupo (kung-fu): [andressa]
Membros do grupo (violao): [gustavo]
Membros do grupo (ciclismo): [cristiane]
Membros do grupo (cachorro): [tereza, cristiane, rodrigo]
Membros do grupo (moto): [carlos]
Membros do grupo (carro): [carlos, rodrigo]
Membros do grupo (livro): [gustavo, rodrigo]
Membros do grupo (novela): [andressa, tereza, cristiane]
72
Casa do Código
Capítulo 5. Redis no mundo real Parte 3
Saber se uma pessoa é membro de um determinado grupo
Para realizar essa tarefa, poderíamos obter todos os elementos do con-
junto, iterar sobre eles e validar se algum dos elementos contém o valor que procuramos. Sim, isso é possível e funciona, mas o Redis já fornece um comando para verificar isso de forma automática. O comando para isso é o
SISMEMBER repare que não é o mesmo comando SMEMBERS que usa-
mos no exemplo anterior. Esse comando recebe, além do nome (chave) do
conjunto, o valor que queremos validar se existe no conjunto. O valor 1 é retornado quando o valor existe, e o valor 0 é retornado quando o valor não
existe.
Vejamos agora um exemplo de uso desse comando:
public class PessoaExisteNoGrupo {
public void existe(String grupo, String pessoa) {
String chave = String.format("grupos:%s:membros",
grupo);
Jedis jedis = new Jedis("localhost");
boolean resultado = jedis.sismember(chave, pessoa);
System.out.println(
String.format(
"%s é membro do grupo (%s)? %s",
pessoa,
grupo,
resultado ? "SIM" : "NÃO"
)
);
}
public static void main(String[] args) {
PessoaExisteNoGrupo pessoa = new PessoaExisteNoGrupo();
pessoa.existe("judo", "rodrigo");
pessoa.existe("livro", "gustavo");
pessoa.existe("cachorro", "cristiane");
pessoa.existe("cachorro", "andressa");
73
5.3. Manipular relacionamento entre amigos e seus grupos
Casa do Código
pessoa.existe("violao", "carlos");
}
}
O resultado apresentado pelo exemplo anterior foi: