Redis Total: Sesiones, Caché & Locks
Redis 7.0 es el componente de infraestructura de más alta criticidad en Mañuti. La plataforma descarta por completo los drivers basados en archivos (file) o bases de datos relacionales (database), delegando la totalidad del estado volátil a la memoria RAM.
1. Los Tres Vectores de Redis en Mañuti
flowchart LR
REDIS["[Redis 7.0 (In-Memory Engine)]"]
SESIONES["[1. Sesiones de Usuario]<br/>(520 Bytes / sesión)"]
CACHE["[2. Almacén de Caché & Tags]<br/>(Catálogos y Config)"]
BROKER["[3. Broker de Colas Horizon & Bus Pub/Sub Reverb]"]
REDIS --> SESIONES
REDIS --> CACHE
REDIS --> BROKER
2. Gestión de Sesiones Ultraligeras
Al configurar SESSION_DRIVER=redis, las sesiones de usuario se resuelven en microsegundos, eliminando la latencia de I/O en disco que ralentiza las instalaciones convencionales de Laravel.
Métricas de Consumo
- Peso promedio por sesión activa: 520 Bytes (0.52 KB).
- Proyección de escalamiento: 10,000 sesiones concurrentes consumen únicamente ~5.2 MB de memoria RAM en Redis.
3. Bloqueos Atómicos (Atomic Locks)
Para evitar condiciones de carrera (Race Conditions) en tareas críticas distribuidas (tales como la ejecución del Planificador Atómico o la generación de reportes pesados), Mañuti utiliza semáforos en memoria:
use Illuminate\Support\Facades\Cache;
$lock = Cache::lock('procesando_reporte_anual', 120);
if ($lock->get()) {
try {
// Ejecución de la tarea pesada
} finally {
$lock->release();
}
} else {
return response()->json(['error' => 'El proceso ya se encuentra en ejecución en otro nodo.'], 429);
}
4. Agrupamiento con Tags (Caché Selectivo)
Redis soporta la invalidación quirúrgica mediante etiquetas, permitiendo purgar familias de datos sin destruir la caché global:
// Almacenar catálogo de clientes con etiqueta
Cache::tags(['catalogos', 'clientes'])->put('listado_vip', $clientes, 3600);
// Purgar únicamente la caché de catálogos sin tocar las sesiones ni la configuración
Cache::tags(['catalogos'])->flush();