← Volver al listado de tecnologías

Persistencia en Valkey

Por: Artiko
valkeypersistenciardbaofbackup

Persistencia

Opciones de Persistencia

Valkey ofrece dos mecanismos de persistencia:

MecanismoDescripciónProsContras
RDBSnapshots periódicosCompacto, rápido en restartPuede perder datos
AOFLog de operacionesMás durableArchivos más grandes

RDB (Redis Database)

Configuración

# valkey.conf

# Guardar cada N segundos si hubo M cambios
save 900 1      # 15 min si 1+ cambios
save 300 10     # 5 min si 10+ cambios
save 60 10000   # 1 min si 10000+ cambios

# Desactivar RDB
save ""

# Nombre del archivo
dbfilename dump.rdb

# Directorio
dir /var/lib/valkey

# Compresión
rdbcompression yes

# Checksum
rdbchecksum yes

# Parar si falla el snapshot
stop-writes-on-bgsave-error yes

Comandos RDB

# Snapshot manual en background
BGSAVE

# Snapshot bloqueante (solo en shutdown)
SAVE

# Último snapshot exitoso
LASTSAVE

# Info
INFO persistence

Proceso de snapshot

  1. Valkey hace fork del proceso
  2. Proceso hijo escribe datos a archivo temporal
  3. Al completar, renombra a dump.rdb
  4. Proceso padre continúa sirviendo requests
# Ver progreso
INFO persistence
# rdb_bgsave_in_progress:1
# rdb_last_bgsave_status:ok
# rdb_last_bgsave_time_sec:2

AOF (Append Only File)

Configuración

# valkey.conf

# Activar AOF
appendonly yes

# Nombre del archivo
appendfilename "appendonly.aof"

# Directorio
appenddirname "appendonlydir"

# Política de sync
# always    - Cada comando (más lento, más seguro)
# everysec  - Cada segundo (balance)
# no        - Dejar al OS (más rápido, menos seguro)
appendfsync everysec

# Rewrite automático
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# No sync durante rewrite
no-appendfsync-on-rewrite no

Comandos AOF

# Forzar rewrite
BGREWRITEAOF

# Info
INFO persistence
# aof_enabled:1
# aof_rewrite_in_progress:0
# aof_current_size:1234

Formato del AOF

*3
$3
SET
$5
clave
$5
valor

Reparar AOF corrupto

valkey-check-aof --fix appendonlydir/appendonly.aof.1.incr.aof

Modo híbrido (RDB + AOF)

La mejor práctica es usar ambos:

# Activar ambos
appendonly yes
save 900 1
save 300 10

# AOF usa formato RDB para el base
aof-use-rdb-preamble yes

Ventajas:

Estrategias de Backup

Backup simple

#!/bin/bash
# backup.sh

BACKUP_DIR="/backups/valkey"
DATE=$(date +%Y%m%d_%H%M%S)

# Forzar snapshot
valkey-cli BGSAVE

# Esperar a que termine
while [ $(valkey-cli LASTSAVE) == $(valkey-cli LASTSAVE) ]; do
    sleep 1
done

# Copiar archivo
cp /var/lib/valkey/dump.rdb "$BACKUP_DIR/dump_$DATE.rdb"

# Comprimir
gzip "$BACKUP_DIR/dump_$DATE.rdb"

# Limpiar backups viejos (mantener 7 días)
find $BACKUP_DIR -name "*.rdb.gz" -mtime +7 -delete

Backup con AOF

#!/bin/bash
# Copiar directorio AOF completo
tar -czf backup_aof_$(date +%Y%m%d).tar.gz /var/lib/valkey/appendonlydir/

Backup remoto

# Usando rsync
rsync -avz /var/lib/valkey/dump.rdb backup-server:/backups/

# Usando rdb-tools para análisis
pip install rdbtools
rdb --command memory dump.rdb > memory_report.csv

Restauración

Desde RDB

# 1. Detener Valkey
systemctl stop valkey

# 2. Reemplazar dump.rdb
cp /backups/dump.rdb /var/lib/valkey/dump.rdb
chown valkey:valkey /var/lib/valkey/dump.rdb

# 3. Iniciar
systemctl start valkey

# 4. Verificar
valkey-cli DBSIZE

Desde AOF

# 1. Detener Valkey
systemctl stop valkey

# 2. Restaurar directorio AOF
tar -xzf backup_aof.tar.gz -C /var/lib/valkey/

# 3. Verificar integridad
valkey-check-aof /var/lib/valkey/appendonlydir/*.aof

# 4. Iniciar
systemctl start valkey

Monitoreo de Persistencia

# Script de monitoreo
valkey-cli INFO persistence | grep -E "(rdb_|aof_)"

# Alertar si último backup > 24h
LAST_SAVE=$(valkey-cli LASTSAVE)
NOW=$(date +%s)
DIFF=$((NOW - LAST_SAVE))

if [ $DIFF -gt 86400 ]; then
    echo "ALERTA: Último backup hace más de 24h"
fi

Recomendaciones por caso de uso

CasoRDBAOFConfiguración
Cache puroOpcionalNosave ""
SesionesSí (everysec)Balance
Cola de mensajesSí (always)Máxima durabilidad
AnalyticsNoSolo snapshots

Ejercicios

  1. Configura RDB con snapshots cada 5 minutos
  2. Activa AOF y verifica el archivo generado
  3. Implementa un script de backup automático

Resumen