Persistência do Redis

Redis armazena dados em memória. A persistência salva esses dados no disco. Esta lição aborda métodos de persistência RDB e AOF.

Por que Persistência?

Redis é um banco de dados em memória:

Dados na Memória → Persistência → Arquivo em Disco
Arquivo em Disco → Recuperação → Dados na Memória

Redis fornece dois métodos de persistência:

Persistência RDB

O que é RDB?

RDB (Redis Database) salva dados em um ponto específico no tempo como um arquivo binário de snapshot.

Características:

Configuração RDB

Configure em redis.conf:

CONF
# Condições de disparo de snapshot
# save <segundos> <alterações>
save 900 1     # Pelo menos 1 alteração em 900 segundos → dispara snapshot
save 300 10    # Pelo menos 10 alterações em 300 segundos → dispara snapshot
save 60 10000  # Pelo menos 10000 alterações em 60 segundos → dispara snapshot

# Desabilitar RDB (comentar save ou definir como vazio)
# save ""

# Nome do arquivo RDB
dbfilename dump.rdb

# Diretório de armazenamento do arquivo RDB
dir /var/lib/redis

# Compressão RDB (recomendado manter ativado)
rdbcompression yes

# Checksum RDB (recomendado manter ativado)
rdbchecksum yes

Disparo Manual de RDB

REDIS
# SAVE: snapshot bloqueante (use com cuidado em produção)
SAVE
OK  # Snapshot completo, Redis foi bloqueado durante este tempo

# BGSAVE: snapshot em segundo plano (recomendado)
BGSAVE
Background saving started  # Retorna imediatamente, executa em segundo plano
⚠️ Observação: SAVE bloqueia o Redis até que o snapshot seja concluído. BGSAVE executa em segundo plano e não bloqueia.

Local do Arquivo RDB

BASH
# Local padrão
/var/lib/redis/dump.rdb

# Ou diretório especificado na configuração
dir /data/redis
dbfilename dump.rdb

Recuperação RDB

Redis carrega automaticamente o arquivo RDB na inicialização:

BASH
# 1. Coloque o arquivo RDB no diretório configurado
cp dump.rdb /var/lib/redis/

# 2. Inicie o Redis
redis-server

# Redis carrega automaticamente dump.rdb para recuperar dados

Prós e Contras do RDB

Prós:

Contras:

Persistência AOF

O que é AOF?

AOF (Append Only File) registra todo comando de escrita. Na recuperação, Redis reexecuta esses comandos.

Características:

Configuração AOF

CONF
# Habilitar AOF
appendonly yes

# Nome do arquivo AOF
appendfilename "appendonly.aof"

# Estratégia de sincronização AOF
appendfsync everysec

# Desabilitar fsync durante reescrita AOF
no-appendfsync-on-rewrite no

# Tamanho do arquivo AOF dispara reescrita
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

Estratégias de Sincronização AOF

Estratégia Descrição Desempenho Segurança
always Sincronizar em cada escrita Mais lento Mais seguro
everysec Sincronizar uma vez por segundo Moderado Razoavelmente seguro (máx. 1 segundo de perda)
no Deixar o SO decidir Mais rápido Menos seguro
💡 Recomendação: appendfsync everysec — equilibra desempenho e segurança.

Reescrita AOF

O arquivo AOF cresce continuamente. A reescrita o compacta:

REDIS
# Disparar manualmente a reescrita AOF
BGREWRITEAOF
Background append only file rewriting started

Princípio da reescrita:

Condições de disparo da reescrita:

CONF
# Tamanho do arquivo AOF cresceu 100% desde a última reescrita
auto-aof-rewrite-percentage 100

# Arquivo AOF deve ter pelo menos 64MB para disparar reescrita
auto-aof-rewrite-min-size 64mb

Recuperação AOF

Redis carrega automaticamente o arquivo AOF na inicialização:

BASH
# 1. Coloque o arquivo AOF no diretório configurado
cp appendonly.aof /var/lib/redis/

# 2. Inicie o Redis
redis-server

# Redis carrega automaticamente appendonly.aof para recuperar dados

Reparo de Arquivo AOF

BASH
# Verificar arquivo AOF
redis-check-aof appendonly.aof

# Reparar arquivo AOF
redis-check-aof --fix appendonly.aof

Prós e Contras do AOF

Prós:

Contras:

RDB vs AOF Comparação

Aspecto RDB AOF
Tamanho do arquivo Pequeno (binário compacto) Grande (comandos de texto)
Velocidade de recuperação Rápida Lenta
Segurança dos dados Pode perder minutos de dados No máximo 1 segundo perdido
Impacto no desempenho Baixo (snapshot em segundo plano) Médio (fsync frequente)
Legibilidade do arquivo Não legível Legível
Caso de uso Backup, replicação Altos requisitos de segurança de dados

Persistência Híbrida

Redis 4.0+ suporta persistência híbrida, combinando os benefícios de RDB e AOF.

Configurando Persistência Híbrida

CONF
# Habilitar AOF
appendonly yes

# Habilitar persistência híbrida
aof-use-rdb-preamble yes

Princípio da Persistência Híbrida

Durante a reescrita AOF:

  1. Primeiro escreve dados atuais em formato RDB (rápido, compacto)
  2. Depois anexa novas operações de escrita em formato AOF
Estrutura do arquivo AOF:
[Dados de snapshot em formato RDB] + [Comandos incrementais em formato AOF]

Vantagens da Persistência Híbrida

💡 Recomendação: Redis 4.0+ deve usar persistência híbrida para desempenho e segurança.

Melhores Práticas de Persistência

Cenário 1: Apenas Cache

CONF
# Cache pode não precisar de persistência, ou apenas RDB
save 900 1
appendonly no

Cenário 2: Armazenamento de Dados

CONF
# Armazenamento de dados usa AOF ou persistência híbrida
save 900 1
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes

Cenário 3: Alta Disponibilidade

CONF
# Habilitar ambos RDB e AOF
save 900 1
save 300 10
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes

Estratégia de Backup

BASH
# Fazer backup regular de arquivos RDB e AOF
# 1. Usar cron para copiar arquivos
0 2 * * * cp /var/lib/redis/dump.rdb /backup/dump-$(date +\%Y\%m\%d).rdb
0 2 * * * cp /var/lib/redis/appendonly.aof /backup/aof-$(date +\%Y\%m\%d).aof

# 2. Criar um snapshot com BGSAVE e depois fazer backup
redis-cli BGSAVE
sleep 10  # Aguardar snapshot concluir
cp /var/lib/redis/dump.rdb /backup/

Estratégia de Recuperação

BASH
# Se ambos RDB e AOF existirem, Redis prefere AOF
# 1. Parar Redis
redis-cli SHUTDOWN NOSAVE

# 2. Restaurar arquivo
cp /backup/appendonly.aof /var/lib/redis/

# 3. Iniciar Redis
redis-server

Monitoramento de Persistência

Verificando Status da Persistência

REDIS
# Visualizar status RDB
INFO persistence

# Métricas principais:
# rdb_last_save_time: Último horário de snapshot
# rdb_changes_since_last_save: Alterações desde o último snapshot
# aof_enabled: Se AOF está habilitado
# aof_rewrite_in_progress: Reescrita AOF em andamento

Monitorando Desempenho da Persistência

BASH
# Monitorar duração do snapshot RDB
redis-cli INFO persistence | grep rdb_last_bgsave_time_sec

# Monitorar duração da reescrita AOF
redis-cli INFO persistence | grep aof_last_rewrite_time_sec

❓ Perguntas Frequentes

P RDB e AOF podem ser habilitados ao mesmo tempo?
R Sim. Redis usa ambos os métodos e prefere AOF para recuperação.
P Como escolher um método de persistência?
R Para cache, use RDB ou nenhuma persistência. Para armazenamento de dados, use AOF ou persistência híbrida.
P E se o arquivo AOF ficar muito grande?
R Use BGREWRITEAOF ou configure condições automáticas de reescrita.
P A persistência afeta o desempenho?
R Há algum impacto. RDB tem impacto pequeno (snapshot em segundo plano), AOF tem impacto moderado (fsync frequente).
P Como minimizar a perda de dados?
R Use AOF com appendfsync everysec — no máximo 1 segundo de perda de dados.

📖 Resumo

📝 Atividades

  1. Configuração RDB: Configure condições automáticas de snapshot RDB, dispare manualmente BGSAVE
  2. Configuração AOF: Habilite AOF, teste diferenças de desempenho entre estratégias de sincronização
  3. Reescrita AOF: Dispare reescrita AOF e observe mudanças no tamanho do arquivo
  4. Recuperação de dados: Faça backup de arquivos RDB/AOF e simule a recuperação de dados

Próxima Lição

Na próxima lição, nós aprenderemos sobre Segurança do Redis, abordando configuração de segurança e controle de acesso.

100%