5.3 KiB
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:
- Sesiones de usuario: Todas las sesiones se almacenan en Redis (base de datos 1)
- 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:
- Configurar contraseña en Redis:
# En /etc/redis/redis.conf
requirepass tu_contraseña_segura
- 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',
}
}
}
- 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
- Rendimiento: Redis es extremadamente rápido (en memoria)
- Escalabilidad: Permite múltiples servidores compartiendo sesiones
- Expiración automática: Las sesiones expiran automáticamente
- Persistencia: Opcionalmente puede persistir datos en disco
Ventajas del Cacheo de Productos
- Velocidad: ~15x más rápido cargar desde caché vs base de datos
- Reducción de carga: Menos queries a la base de datos
- Mejor UX: Páginas de producto cargan instantáneamente
- 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