Cache con Redis

👨‍🍳 Chef⏱️ 25 minutos

📋 Prerequisitos sugeridos

  • Redis
  • API REST

Lo que vas a construir

Una capa de cache con Redis que reduce drasticamente los tiempos de respuesta de tu API guardando datos frecuentemente consultados en memoria. Implementaras un wrapper de cache generico que funciona con cualquier funcion async, expiracion automatica por tiempo (TTL), invalidacion manual cuando los datos cambian y patrones para cachear responses de API. Al terminar, tendras respuestas que pasan de segundos a milisegundos, reduciendo la carga en tu base de datos y mejorando la experiencia del usuario.


Paso 1: Pídele a una IA la implementación

Necesito implementar cache con Redis:
- Wrapper para fetch con cache
- Invalidación por tiempo (TTL)
- Invalidación manual
- Pattern para API routes
- TypeScript + ioredis

Dame el código completo.

Código

import Redis from 'ioredis'

const redis = new Redis(process.env.REDIS_URL)

export async function cached<T>(
  key: string,
  fetcher: () => Promise<T>,
  ttl = 3600
): Promise<T> {
  const cached = await redis.get(key)
  if (cached) return JSON.parse(cached)

  const data = await fetcher()
  await redis.setex(key, ttl, JSON.stringify(data))
  return data
}

// Uso
const users = await cached(
  'users:all',
  () => prisma.user.findMany(),
  300 // 5 minutos
)

Invalidar

// Invalidar una key
await redis.del('users:all')

// Invalidar por patrón
const keys = await redis.keys('users:*')
if (keys.length) await redis.del(...keys)

Próximo paso

Arduino + MQTT