# Redis y cache para el agente

## Rol de Redis

Redis alimenta al agente con estado caliente y evita consultas repetidas cuando el usuario pregunta varias cosas seguidas.

No reemplaza a MySQL.

```text
MySQL = verdad
Redis = cache, estado reciente, locks, sesiones
RAG = conocimiento estable
Modelo = razonamiento
```

## Claves que usa el agente

### Sesion y presencia

```text
rt:session:{tenant}:{uid}:{hash}
rt:presence:{tenant}
```

Uso:

- validar WS;
- saber usuarios conectados;
- responder preguntas como "que choferes estan online?".

### GPS

```text
geo:last:{tenant}:{chofer}
```

Uso:

- ultimo punto conocido;
- preguntas de ubicacion;
- contexto de En Mano/GeoChoferes.

### Catalogos

```text
cat:{tenant}:estados_envios
cat:{tenant}:clientes
cat:{tenant}:choferes
cat:{tenant}:zonas
cat:{tenant}:depositos
cat:{tenant}:servicios
cat:{tenant}:listas
cat:{tenant}:listaschofer
```

Uso:

- traducir DIDs a nombres;
- interpretar estados;
- resolver filtros;
- armar contexto compacto.

### Operacion

```text
ops:{tenant}:envios:resumen
ops:{tenant}:envios:por_estado
ops:{tenant}:envios:por_zona
ops:{tenant}:envios:por_chofer
ops:{tenant}:enmano:{fecha}
```

Uso:

- dashboard IA;
- preguntas generales;
- alertas de riesgo;
- contexto rapido.

### Contexto IA

```text
ia:{tenant}:context:logistica:{uid}:{hashCorto}
```

TTL: 60 a 180 segundos.

Uso:

- reutilizar contexto entre preguntas de la misma conversacion;
- evitar reconstruir catalogos/resumen constantemente;
- invalidar cuando cambia filtro, seleccion o evento operativo.

## Invalidacion

| Evento | Claves |
|---|---|
| cambio de estado | `ops:{tenant}:envios:*`, `ia:{tenant}:context:logistica:*` |
| asignacion | `ops:{tenant}:envios:por_chofer`, `ops:{tenant}:enmano:*`, `ia:{tenant}:context:logistica:*` |
| zona asignada | `ops:{tenant}:envios:por_zona`, `ia:{tenant}:context:logistica:*` |
| guardar cliente | `cat:{tenant}:clientes` |
| guardar usuario/chofer | `cat:{tenant}:choferes`, `rt:presence:{tenant}` |
| guardar zona | `cat:{tenant}:zonas`, `route:{tenant}:zonas_resolver` |
| guardar listas | `cat:{tenant}:listas`, `price:{tenant}:cliente:*` |
| guardar listas chofer | `cat:{tenant}:listaschofer`, `price:{tenant}:chofer:*` |

Usar `SCAN`, no `KEYS`, para borrar patrones en produccion.

## Cache-aside

Patron recomendado:

```text
leer:
  GET redis
  si existe -> usar
  si no -> DB -> SETEX -> usar

guardar:
  DB
  DEL/SCAN claves afectadas
```

## No cachear

- listados completos de envios;
- historial completo;
- auditoria;
- liquidaciones finales;
- costos definitivos;
- payloads de integraciones;
- datos sensibles sin TTL corto.

## Relacion con documento central

Ver tambien:

```text
manuales_y_circuitos/08-redis-cache-operativo.md
```

Ese documento define la estrategia global de Redis para todo Lightdata OS. Este archivo baja el uso especifico para el agente.

