Conjuntos do Redis (Parte 1)
Um set (conjunto) é uma coleção não ordenada de strings únicas. Esta lição aborda operações básicas de conjunto.
O que é um Set?
Um set é similar a:
- set do Python
- Set do JavaScript
- HashSet do Java
Características do set:
- Não ordenado: elementos não têm ordem específica
- Único: deduplicação automática
- Suporta operações de conjunto: interseção, união, diferença
Comandos Básicos
SADD: Adicionar Elementos
REDIS
# Adicionar um único elemento
SADD myset "a"
(integer) 1
# Adicionar múltiplos elementos
SADD myset "b" "c" "d"
(integer) 3
# Adicionar um elemento existente (retorna 0, sem duplicata)
SADD myset "a"
(integer) 0
SMEMBERS: Obter Todos os Elementos
REDIS
SMEMBERS myset
1) "a"
2) "b"
3) "c"
4) "d"
⚠️ Observação: SMEMBERS retorna todos os elementos de uma vez. Para grandes conjuntos de dados, isso pode bloquear. Use SSCAN em produção.
SISMEMBER: Verificar se Elemento Existe
REDIS
SISMEMBER myset "a"
(integer) 1
SISMEMBER myset "z"
(integer) 0
SCARD: Obter Tamanho do Conjunto
REDIS
SCARD myset
(integer) 4
SREM: Remover Elementos
REDIS
SREM myset "a"
(integer) 1
SREM myset "z"
(integer) 0
SPOP: Remover Elementos Aleatoriamente
REDIS
# Remover um elemento aleatório
SPOP myset
"b"
# Remover 2 elementos aleatórios
SPOP myset 2
1) "c"
2) "d"
SRANDMEMBER: Obter Elementos Aleatoriamente (Sem Remover)
REDIS
SADD myset2 "x" "y" "z"
# Obter 1 elemento aleatório
SRANDMEMBER myset2
"x"
# Obter 2 elementos aleatórios distintos
SRANDMEMBER myset2 2
1) "y"
2) "z"
# Obter 2 elementos aleatórios (pode repetir)
SRANDMEMBER myset2 -2
1) "x"
2) "x"
Casos de Uso
| Cenário | Descrição |
|---|---|
| Sistema de tags | Tags de usuário, tags de artigo |
| Relacionamentos sociais | Listas de amigos, listas de seguidores |
| Deduplicação | Contagens únicas, estatísticas de UV |
| Sorteio | Sortear vencedores aleatoriamente |
Exemplo: Sistema de Tags
BASH
# Adicionar tags a um artigo
SADD article:123:tags "redis" "database" "nosql"
# Obter todas as tags de um artigo
SMEMBERS article:123:tags
# Verificar se artigo tem uma tag específica
SISMEMBER article:123:tags "redis"
# Remover uma tag
SREM article:123:tags "nosql"
Exemplo: Amigos em Comum
BASH
# Amigos do Usuário 1
SADD friends:user1 "Alice" "Bob" "Charlie"
# Amigos do Usuário 2
SADD friends:user2 "Bob" "Charlie" "David"
# Amigos em comum
SINTER friends:user1 friends:user2
Exemplo: Sistema de Sorteio
BASH
# Adicionar participantes
SADD lottery "user1" "user2" "user3" "user4" "user5"
# Sortear 1 vencedor
SPOP lottery
# Sortear 3 vencedores (sem repetição)
SPOP lottery 3
Operações de Conjunto
SINTER: Interseção
REDIS
SADD set1 "a" "b" "c"
SADD set2 "b" "c" "d"
SINTER set1 set2
1) "b"
2) "c"
SUNION: União
REDIS
SUNION set1 set2
1) "a"
2) "b"
3) "c"
4) "d"
SDIFF: Diferença
REDIS
# Elementos em set1 mas não em set2
SDIFF set1 set2
1) "a"
# Elementos em set2 mas não em set1
SDIFF set2 set1
1) "d"
Armazenando Resultados
REDIS
# Armazenar interseção em um novo conjunto
SINTERSTORE resultado set1 set2
(integer) 2
# Armazenar união em um novo conjunto
SUNIONSTORE resultado set1 set2
(integer) 4
# Armazenar diferença em um novo conjunto
SDIFFSTORE resultado set1 set2
(integer) 1
❓ Perguntas Frequentes
P Qual é a diferença entre SMEMBERS e SSCAN?
R SMEMBERS retorna todos os elementos de uma vez e pode bloquear para conjuntos grandes. SSCAN retorna em lotes — adequado para grandes conjuntos de dados.
P Qual é o número máximo de elementos em um conjunto?
R Teoricamente 2^32 - 1 elementos (cerca de 4.2 bilhões).
P Qual é a diferença entre set e list?
R Sets são não ordenados com elementos únicos; lists são ordenadas e permitem duplicatas. Escolha com base em suas necessidades.
📖 Resumo
- Sets são coleções não ordenadas de strings únicas
- SADD adiciona, SREM remove, SMEMBERS obtém todos os elementos
- SISMEMBER verifica existência, SCARD obtém tamanho
- Suporta interseção (SINTER), união (SUNION), diferença (SDIFF)
- Adequado para tags, relacionamentos sociais, deduplicação, sorteio
📝 Atividades
- Prática de tags: Crie um sistema de tags de artigo, adicione tags diferentes a 3 artigos, encontre artigos com tags em comum
- Prática de amigos: Simule relacionamentos de amigos para 3 usuários, encontre amigos em comum entre quaisquer dois usuários
- Prática de sorteio: Crie um sistema de sorteio, adicione 10 participantes, sorteie 3 vencedores aleatoriamente
Próxima Lição
Na próxima lição, nós aprenderemos sobre Conjuntos do Redis (Parte 2), abordando operações avançadas de conjunto.



