Redis: Transações do Redis

Transações Redis permitem executar múltiplos comandos como uma única unidade. Esta lição aborda o uso e cuidados com transações.

1. O que é uma Transação?

Uma transação é uma coleção de comandos que são executados sequencialmente sem interrupção por outros comandos.

BASH
MULTI → Comando 1 → Comando 2 → Comando 3 → EXEC

2. Comandos Básicos

(1) MULTI: Iniciar uma Transação

REDIS
MULTI
OK

(2) EXEC: Executar a Transação

REDIS
MULTI
OK

SET nome "Alice"
QUEUED

SET age 25
QUEUED

EXEC
1) OK
2) OK

(3) DISCARD: Cancelar a Transação

REDIS
MULTI
OK

SET nome "Bob"
QUEUED

DISCARD
OK

3. Propriedades da Transação

(1) Fila de Comandos

Comandos em uma transação não são executados imediatamente, mas colocados em uma fila:

REDIS
MULTI
OK

SET a 1
QUEUED

SET b 2
QUEUED

GET a
QUEUED

EXEC
1) OK
2) OK
3) "1"

(2) Atomicidade

Comandos em uma transação são todos executados ou nenhum é executado:

REDIS
MULTI
OK

SET a 1
QUEUED

SET b 2
QUEUED

EXEC
1) OK
2) OK
⚠️ Observação: Transações Redis não suportam rollback. Se um comando falhar dentro de uma transação, outros comandos ainda executam.


4. WATCH: Lock Otimista

WATCH monitora chaves. Se qualquer chave monitorada for modificada antes da transação executar, a transação é cancelada.

(1) Uso Básico

REDIS
# Monitorar uma chave
WATCH minhaChave
OK

# Iniciar uma transação
MULTI
OK

# Modificar a chave
SET minhaChave "novo_valor"
QUEUED

# Executar a transação
EXEC
(nil)  # Retorna nil se a transação foi cancelada (chave foi modificada)

(2) Implementando Lock Otimista

▶ Exemplo: Lock Otimista

BASH
# Cliente 1
WATCH balance
GET balance
MULTI
SET balance 900
EXEC

# Cliente 2 (antes do Cliente 1 executar EXEC)
SET balance 800

5. Casos de Uso

(1) Dedução de Estoque

▶ Exemplo: Diminuir Estoque

BASH
# Diminuir estoque (operação atômica)
MULTI
DECR stock:product:123
INCR sold:product:123
EXEC

(2) Transferência de Dinheiro

▶ Exemplo: Transferência

BASH
# Transferir: enviar 100 do usuário A para o usuário B
MULTI
DECRBY balance:user:a 100
INCRBY balance:user:b 100
EXEC

(3) Operações em Lote

▶ Exemplo: Configuração em Lote

BASH
# Definir múltiplas chaves
MULTI
SET user:1:name "Alice"
SET user:1:age 25
SET user:1:email "alice@example.com"
EXEC

6. Transações vs Scripts

(1) Scripts Lua (Recomendados)

Scripts Lua são mais poderosos que transações, suportando lógica condicional e loops:

REDIS
# Operação atômica: deduzir apenas se o saldo for suficiente
EVAL "
  local balance = tonumber(redis.call('GET', KEYS[1]) or 0)
  if balance >= tonumber(ARGV[1]) then
    redis.call('DECRBY', KEYS[1], ARGV[1])
    return 1
  else
    return 0
  end
" 1 balance:user:a 100

(2) Transação vs Script Comparação

Recurso Transação Script Lua
Atomicidade
Lógica condicional
Loops
Desempenho Bom Melhor
Complexidade Simples Mais complexo

7. Notas Importantes

⚠️ Sem rollback: Transações Redis não suportam rollback. Se um comando falhar, outros comandos ainda executam.

⚠️ Erros de comando: Erros de sintaxe cancelam a transação inteira. Erros de tempo de execução não afetam outros comandos.

💡 Scripts Lua recomendados: Para operações atômicas complexas, scripts Lua são recomendados.

❓ Perguntas Frequentes

P Transações Redis suportam rollback?
R Não. Transações Redis não suportam rollback. Use scripts Lua se você precisar de comportamento de rollback.
P O que WATCH faz?
R WATCH implementa lock otimista. Ele monitora chaves e cancela a transação se qualquer chave monitorada for modificada.
P Comandos em uma transação são executados atomicamente?
R Sim. Comandos em uma transação são executados sequencialmente sem interrupção por outros comandos.

📖 Resumo


8. 📝 Atividades

  1. Prática de transação: Use MULTI/EXEC para executar múltiplos comandos
  2. Prática de lock otimista: Use WATCH para implementar um lock otimista simples
  3. Prática de script Lua: Use EVAL para executar um script Lua

9. Próxima Lição

Na próxima lição, nós aprenderemos sobre Persistência do Redis, abordando métodos de persistência RDB e AOF.

📝 Exercícios

  1. Prática: Execute os comandos apresentados nesta lição
  2. Experimentação: Teste variações dos comandos aprendidos
  3. Aplicação: Aplique os conceitos em um projeto prático
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%