Strings do Redis (Parte 1)

Strings são o tipo de dado mais básico do Redis. Esta lição aborda comandos básicos de operação de string.

Comando SET em Detalhe

O comando SET define um par chave-valor e é o comando Redis mais usado.

Uso Básico

REDIS
SET minhaChave "Olá Redis"
OK

Um SET bem-sucedido retorna OK.

Parâmetros do Comando SET

SET suporta múltiplos parâmetros opcionais para diferentes estratégias de definição:

REDIS
# EX: definir expiração em segundos
SET session:token "user_data" EX 3600

# PX: definir expiração em milissegundos
SET cache:key "valor" PX 60000

# NX: definir apenas se a chave não existir
SET lock:resource "locked" NX

# XX: definir apenas se a chave existir
SET counter 100 XX

# Combinado: definir um lock com expiração
SET lock:order:123 "locked" NX EX 10

Referência de Parâmetros

Parâmetro Descrição Exemplo
EX seconds Definir expiração em segundos SET key value EX 60
PX milliseconds Definir expiração em milissegundos SET key value PX 60000
EXAT timestamp Definir expiração como timestamp Unix (segundos) SET key value EXAT 1700000000
PXAT timestamp Definir expiração como timestamp Unix (milissegundos) SET key value PXAT 1700000000000
NX Definir apenas se a chave não existir SET key value NX
XX Definir apenas se a chave existir SET key value XX
GET Retornar o valor antigo (Redis 6.2+) SET key value GET
KEEPTTL Manter o TTL existente SET key value KEEPTTL
💡 Implementação de lock distribuído: SET lock:resource "valor" NX EX 10 é a maneira clássica de implementar locks distribuídos. NX garante atomicidade, EX previne deadlocks.

Exemplo: Implementando um Lock Distribuído

BASH
# Adquirir lock (definir apenas se o lock não existir, liberação automática após 10 segundos)
SET lock:product:123 "order_process" NX EX 10

# Liberar lock (deletar a chave)
DEL lock:product:123
▶ Experimente

Comando GET em Detalhe

O comando GET recupera o valor de uma chave.

Uso Básico

REDIS
SET minhaChave "Olá Redis"
GET minhaChave
"Olá Redis"

Chave Não Existe

REDIS
GET naoexiste
(nil)

Retorna (nil) quando a chave não existe.

Variantes do Comando GET

REDIS
# GETSET: obter valor antigo e definir novo valor
SET counter 100
GETSET counter 0
"100"  # Retorna valor antigo

GET counter
"0"    # Atualizado para novo valor

# GETRANGE: obter substring de uma string
SET message "Olá Redis Mundo"
GETRANGE message 0 3
"Olá"

GETRANGE message 5 9
"Redis"
⚠️ Observação: Os índices do GETRANGE começam em 0 e incluem a posição final. GETRANGE key 0 4 obtém caracteres nas posições 0 a 4 (5 caracteres no total).

DEL - Deletar Chaves

O comando DEL deleta uma ou mais chaves.

Deletar uma Única Chave

REDIS
SET temp "temporário"
DEL temp
(integer) 1  # Retorna o número de chaves deletadas

Deletar Múltiplas Chaves

REDIS
SET key1 "valor1"
SET key2 "valor2"
SET key3 "valor3"

DEL key1 key2 key3
(integer) 3  # Deletou 3 chaves

Deletar Chave Inexistente

REDIS
DEL naoexiste
(integer) 0  # Deletou 0 chaves
💡 Valor de retorno: DEL retorna o número de chaves realmente deletadas, não o valor deletado.

MSET e MGET Operações em Lote

MSET e MGET podem definir ou obter múltiplos pares chave-valor de uma só vez, reduzindo viagens de ida e volta na rede.

MSET Configuração em Lote

REDIS
MSET user:1:name "Alice" user:1:age "25" user:1:city "Beijing"
OK

# Equivalente a
SET user:1:name "Alice"
SET user:1:age "25"
SET user:1:city "Beijing"

MGET Obtenção em Lote

REDIS
MGET user:1:name user:1:age user:1:city
1) "Alice"
2) "25"
3) "Beijing"

# Incluindo chaves que não existem
MGET user:1:name user:1:email user:1:age
1) "Alice"
2) (nil)  # Chave não existe
3) "25"

MSETNX: Definir Apenas se Nenhuma das Chaves Existir

REDIS
# Definir apenas se nenhuma das chaves existir
MSETNX key1 "valor1" key2 "valor2"
(integer) 1  # Sucesso

# Tentar novamente (key1 e key2 já existem)
MSETNX key1 "novo1" key3 "valor3"
(integer) 0  # Falhou, key1 já existe

# Verificar: key3 não foi definida
GET key3
(nil)
⚠️ Observação: MSETNX é atômico — ou todos são bem-sucedidos ou todos falham.

STRLEN - Obter Tamanho

STRLEN retorna o tamanho de um valor de string (em bytes).

Uso Básico

REDIS
SET minhaChave "Olá Redis"
STRLEN minhaChave
(integer) 10

SET texto "Olá"
STRLEN texto
(integer) 4

Chave Não Existe

REDIS
STRLEN naoexiste
(integer) 0

APPEND - Anexar à String

O comando APPEND anexa conteúdo ao final de uma string.

Uso Básico

REDIS
SET minhaChave "Olá"
APPEND minhaChave " Redis"
(integer) 10  # Retorna o tamanho total após anexar

GET minhaChave
"Olá Redis"

Anexando a uma Chave Inexistente

REDIS
APPEND novaChave "valor"
(integer) 5  # Equivalente a SET novaChave "valor"

GET novaChave
"valor"
💡 Caso de uso: APPEND pode ser usado para construir logs, concatenar URLs, etc.

Casos de Uso de String

Caso de Uso 1: Cache

REDIS
# Cache de resposta de API
SET cache:api:user:1 '{"name":"Alice","age":25}' EX 300

# Obter dados em cache
GET cache:api:user:1

Caso de Uso 2: Armazenamento de Sessão

REDIS
# Armazenar sessão do usuário (expiração de 30 minutos)
SET session:token:abc123 '{"user_id":1,"role":"admin"}' EX 1800

# Validar sessão
GET session:token:abc123

Caso de Uso 3: Lock Distribuído

REDIS
# Adquirir lock (liberação automática após 10 segundos)
SET lock:order:process "server1" NX EX 10

# Retorna OK significa lock adquirido
# Retorna nil significa lock está sendo mantido por outro processo

# Liberar lock
DEL lock:order:process

Caso de Uso 4: Código de Verificação

REDIS
# Armazenar código de verificação (expiração de 5 minutos)
SET code:phone:13800138000 "123456" EX 300

# Verificar
GET code:phone:13800138000

Caso de Uso 5: Limitação de Taxa

REDIS
# Registrar contagem de acesso à API (janela de 1 minuto)
SET limit:api:user:1 "0" EX 60

# Incrementar em cada acesso (precisa ser usado com INCR)

Otimização de Codificação de String

Redis seleciona automaticamente a codificação ideal com base no conteúdo da string:

Codificação Condição Descrição
int Valor inteiro dentro do intervalo long Codificação de inteiro, economiza memória
embstr Tamanho da string <= 44 bytes String embutida, armazenamento compacto
raw Tamanho da string > 44 bytes String normal, usa SDS

Verificando Tipo de Codificação

REDIS
SET intkey 12345
OBJECT ENCODING intkey
"int"

SET chavecurta "Olá"
OBJECT ENCODING chavecurta
"embstr"

SET chavelonga "Esta é uma string muito longa que excede o limite de 44 bytes"
OBJECT ENCODING chavelonga
"raw"
ℹ️ Observação: A codificação é selecionada automaticamente pelo Redis — nenhuma intervenção manual é necessária. Entender a codificação ajuda a otimizar o uso de memória.

❓ Perguntas Frequentes

P SET substitui uma chave existente?
R Sim. Por padrão, SET substitui uma chave existente. Use o parâmetro NX para definir apenas se a chave não existir.
P Como implemento "atualizar apenas se a chave existir"?
R Use o parâmetro XX do SET: SET key value XX. Ele só define o novo valor se a chave já existir.
P Qual é a diferença entre MSET e múltiplos SETs?
R MSET é uma operação atômica que completa múltiplas definições em uma única viagem de rede, tornando-a mais eficiente. Múltiplos SETs requerem múltiplas viagens.
P Qual é o tamanho máximo de uma string?
R Máximo 512MB. No entanto, armazenar strings muito grandes não é recomendado, pois afeta o desempenho e a memória.
P Como armazeno dados binários (como imagens)?
R Strings Redis são binary-safe e podem armazená-los diretamente. No entanto, é recomendado armazenar URLs de imagens ou usar serviços de armazenamento de arquivos dedicados.

📖 Resumo

📝 Atividades

  1. Operações básicas: Use SET para armazenar seu nome, idade e cidade, depois recupere todos de uma vez com MGET
  2. Prática de expiração: Defina uma chave com TTL e verifique o tempo restante com TTL
  3. Lock distribuído: Implemente um lock distribuído simples usando SET NX EX, tente adquirir e liberar
  4. Operações em lote: Use MSET para definir 10 chaves, depois use MGET para obter 5 delas

Próxima Lição

Na próxima lição, nós aprenderemos sobre Strings do Redis (Parte 2), abordando operações numéricas e operações de bit.

100%