Redis es una de las bases de datos en memoria más rápidas y populares, diseñada para manejar datos con una latencia mínima. Su capacidad para almacenar datos temporalmente y recuperarlos rápidamente la hace ideal para escenarios como el almacenamiento en caché, la gestión de sesiones, la clasificación de datos en tiempo real y mucho más.

Por otro lado, FastAPI es un framework moderno y rápido para crear APIs en Python, conocido por su eficiencia y facilidad de uso, gracias a la integración nativa de async y type hints. Juntos, Redis y FastAPI forman una combinación poderosa para aplicaciones web y microservicios que necesitan alto rendimiento.
¿Por qué necesitas Redis en una aplicación web?
Redis brilla especialmente cuando trabajas con datos que cambian frecuentemente y necesitas acceso rápido. Algunos casos de uso comunes en una aplicación web incluyen:
- Almacenamiento en caché: Para evitar realizar cálculos o consultas repetitivas a bases de datos lentas.
Ejemplo: Caché de datos como resultados de búsquedas o información estática. - Gestión de sesiones: Para manejar información del usuario de manera eficiente y rápida.
Ejemplo: Almacenar tokens de autenticación o datos temporales de usuarios. - Contadores y rankings en tiempo real: Perfecto para aplicaciones de análisis o juegos en línea.
- Colas de mensajes: Redis puede funcionar como un sistema de mensajería ligera para eventos en tiempo real.
1. Instalar las dependencias necesarias
Primero, instala las bibliotecas necesarias:
pip install redis fastapi-cache2
Además, asegúrate de tener Redis instalado y funcionando en tu sistema. Si no lo tienes, puedes instalarlo o usar Docker:
docker run -d --name redis -p 6379:6379 redis
2. Configurar FastAPI con Redis
Crea un proyecto FastAPI con configuración para la caché.
Código completo:
from fastapi import FastAPI
from fastapi_cache import FastAPICache
from fastapi_cache.backends.redis import RedisBackend
from redis import asyncio as aioredis
import time
app = FastAPI()
# Inicializa la conexión con Redis en el arranque
@app.on_event("startup")
async def startup():
redis = aioredis.from_url("redis://localhost") # Cambia localhost si tu Redis está en otro host
FastAPICache.init(RedisBackend(redis), prefix="fastapi-cache")
# Endpoint con caché usando FastAPI-Cache
@app.get("/data/")
@cache(expire=60)
async def get_data(tipo: str, dia: str, idioma: str):
# Simula la generación de datos
data = {
"tipo": tipo,
"dia": dia,
"idioma": idioma,
"timestamp": time.time() # Marca temporal para diferenciar
}
return {"source": "generated", "data": data}
3. Cómo funciona el código
- Conexión a Redis:
- En el evento
startup, se inicializa una conexión asíncrona a Redis utilizandoaioredis. FastAPICache.initconfigura Redis como el backend para la caché.
- En el evento
- Caché por endpoint:
- En el endpoint
/data/, el decorador@cache(expire=60)almacena los datos generados por la función durante 60 segundos. - Si se realiza la misma solicitud con los mismos parámetros dentro de los 60 segundos, los datos serán servidos desde Redis, sin volver a ejecutar la lógica de generación.
- En el endpoint
4. Probar la aplicación
Ejecuta la aplicación:
uvicorn main:app --reload
Haz solicitudes al endpoint y observa que las respuestas posteriores dentro del tiempo de vida (TTL) serán más rápidas:
- Primera llamada: Generará datos nuevos.
curl "http://127.0.0.1:8000/data/?tipo=x&dia=y&idioma=e"Respuesta:{ "source": "generated", "data": { "tipo": "x", "dia": "y", "idioma": "e", "timestamp": 1696352000.123456 } } - Segunda llamada (dentro de 300 segundos): Los datos se servirán desde la caché.
curl "http://127.0.0.1:8000/data/?tipo=x&dia=y&idioma=e"Respuesta:{ "source": "cache", "data": { "tipo": "x", "dia": "y", "idioma": "e", "timestamp": 1696352000.123456 } }
5. Opciones adicionales
- Actualizar datos en caché: Si los datos cambian frecuentemente, puedes invalidar manualmente la caché usando
FastAPICache.clear()o implementando una estrategia para invalidar claves específicas. - Configurar Redis remoto: Si Redis no está en tu localhost, reemplaza
redis://localhostpor la URL o IP de tu servidor Redis:redis = aioredis.from_url("redis://<IP_DEL_SERVIDOR>:6379") - Prefijos personalizados: Cambia el
prefix="fastapi-cache"para diferenciar cachés si utilizas múltiples aplicaciones o módulos en Redis.

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.