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:

Características do set:

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"
▶ Experimente

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
▶ Experimente

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
▶ Experimente

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

📝 Atividades

  1. Prática de tags: Crie um sistema de tags de artigo, adicione tags diferentes a 3 artigos, encontre artigos com tags em comum
  2. Prática de amigos: Simule relacionamentos de amigos para 3 usuários, encontre amigos em comum entre quaisquer dois usuários
  3. 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.

100%