Files
proyecto-final/REDIS_SETUP.md
T
2026-02-15 09:23:44 +01:00

5.3 KiB

Redis Setup - Configuración de Redis para Sesiones

Configuración Implementada

Este proyecto utiliza Redis para almacenar las sesiones de usuario, mejorando el rendimiento y la escalabilidad.

Paquetes Instalados

  • django-redis 5.4.0: Backend de caché Redis para Django
  • redis 5.2.1: Cliente Python para Redis

Configuración en settings.py

# Redis Configuration
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

# Session Configuration - Use Redis for session storage
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'

Uso en el Proyecto

El proyecto utiliza Redis para:

  1. Sesiones de usuario: Todas las sesiones se almacenan en Redis (base de datos 1)
  2. Cacheo de productos: Los productos visitados se cachean por 5 minutos
    • Primera visita: Se carga desde la base de datos y se cachea
    • Siguientes visitas: Se sirve desde caché (mucho más rápido)
    • Después de 5 minutos: Se recarga desde la BD y se vuelve a cachear
    • Al editar/borrar un producto: Se invalida automáticamente su caché

Instalación de Redis

Linux (Ubuntu/Debian)

sudo apt update
sudo apt install redis-server
sudo systemctl start redis-server
sudo systemctl enable redis-server

Linux (Arch Linux)

sudo pacman -S redis
sudo systemctl start valkey
sudo systemctl enable valkey
# En Arch, Redis se llama Valkey (fork de Redis)
# Comando CLI: valkey-cli en lugar de redis-cli

macOS

brew install redis
brew services start redis

Windows

Descargar desde: https://github.com/microsoftarchive/redis/releases

Verificar que Redis está Funcionando

# Verificar estado del servicio
sudo systemctl status redis-server

# Conectarse a Redis CLI
redis-cli

# En Redis CLI, probar conexión:
ping
# Debería responder: PONG

# Ver todas las claves almacenadas
keys *

# Salir de Redis CLI
exit

Probar la Configuración

# Conectarse a Redis y ver sesiones y productos cacheados
valkey-cli    # o redis-cli según tu sistema
SELECT 1      # Usa la base de datos 1 (definida en LOCATION)
KEYS *        # Ver todas las claves almacenadas

# Ver productos cacheados
KEYS *product*

# Ver sesiones
KEYS *session*

# Ver el contenido de una clave específica
GET <key_name>

# Ver el TTL (tiempo restante) de una clave
TTL <key_name>

Ejemplo de Claves en Redis

  • Productos: :1:product_<id> (ej: :1:product_7)
  • Sesiones: :1:django.contrib.sessions.cache<session_id>
  • Cache general: :1:test_key

Configuración de Producción

Para producción, considera:

  1. Configurar contraseña en Redis:
# En /etc/redis/redis.conf
requirepass tu_contraseña_segura
  1. Actualizar settings.py:
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://:tu_contraseña_segura@127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}
  1. Persistencia de datos: Redis guarda snapshots automáticamente, pero puedes configurar:
# En /etc/redis/redis.conf
save 900 1      # Guardar cada 15 min si hay al menos 1 cambio
save 300 10     # Guardar cada 5 min si hay al menos 10 cambios
save 60 10000   # Guardar cada 1 min si hay al menos 10000 cambios

Ventajas de Redis para Sesiones

  1. Rendimiento: Redis es extremadamente rápido (en memoria)
  2. Escalabilidad: Permite múltiples servidores compartiendo sesiones
  3. Expiración automática: Las sesiones expiran automáticamente
  4. Persistencia: Opcionalmente puede persistir datos en disco

Ventajas del Cacheo de Productos

  1. Velocidad: ~15x más rápido cargar desde caché vs base de datos
  2. Reducción de carga: Menos queries a la base de datos
  3. Mejor UX: Páginas de producto cargan instantáneamente
  4. Auto-invalidación: El caché se limpia automáticamente al editar/borrar productos

Flujo de Cacheo de Productos

Usuario visita producto
        ↓
¿Está en caché? → NO → Cargar de BD → Cachear por 5 min → Mostrar
        ↓
       SÍ
        ↓
¿Pasaron 5 min? → SÍ → Cargar de BD → Cachear por 5 min → Mostrar
        ↓
       NO
        ↓
    Servir desde caché → Mostrar

Monitoreo

# Ver estadísticas en tiempo real
redis-cli --stat

# Monitor de comandos en tiempo real
redis-cli monitor

# Ver información del servidor
redis-cli INFO

Limpieza de Sesiones

Las sesiones en Redis expiran automáticamente según SESSION_COOKIE_AGE de Django (por defecto 2 semanas).

Para limpiar manualmente todas las sesiones:

redis-cli
SELECT 1
FLUSHDB

Troubleshooting

Error: "Connection refused"

  • Verificar que Redis está corriendo: sudo systemctl status redis-server
  • Iniciar Redis: sudo systemctl start redis-server

Sesiones no se guardan

  • Verificar conexión a Redis: redis-cli ping
  • Revisar logs: sudo journalctl -u redis-server -n 50

Alto uso de memoria

  • Ver uso de memoria: redis-cli INFO memory
  • Configurar límite: En redis.conf agregar maxmemory 256mb
  • Política de desalojo: maxmemory-policy allkeys-lru