Cómo Integré Redis en mi API para Mejorar el Rendimiento 🚀 - Episodio 20

integrar-redis-mejorar-rendimiento

Cada petición a mi API golpeaba PostgreSQL como un martillo, ralentizando todo.

¿La solución?

Redis.

En este post te cuento cómo lo integré para acelerar las respuestas y reducir la carga en la base de datos. 🚀🔥"

Índice
  1. 🚀 Mi API estaba lista para producción, pero había un problema...📅 Diario de un SaaS
  2. 🔍 Problema: Consultas costosas y carga innecesaria en PostgreSQL
    1. 🔴 Errores encontrados en la integración de Redis
  3. 🛠️ Implementando Redis como caché en Flask
    1. ✅ 1. Instalación y configuración de Redis en el VPS
    2. ✅ 2. Configuración de Redis en Flask con flask_caching
    3. ✅ 3. Creación de un endpoint de prueba para Redis
    4. ✅ 4. Instalación de dependencias en el entorno virtual de Flask
    5. ✅ 5. Corrección de Gunicorn para apuntar al puerto correcto
  4. 🔄 Prueba final: ¿Redis realmente está funcionando?
  5. 💡 Lecciones aprendidas
    1. 🔹 Redis es un boost enorme para el rendimiento
    2. 🔹 Instalar dependencias en el entorno virtual es crucial
    3. 🔹 Gunicorn debe apuntar a la ruta correcta
    4. 🔹 La documentación y los logs son clave
  6. 🚀 Próximos pasos

🚀 Mi API estaba lista para producción, pero había un problema...📅 Diario de un SaaS

Cada consulta a la base de datos era un viaje costoso.

Y más con tráfico real, esto significaba mayor latencia y carga en PostgreSQL.

Así que el cuerpo y la mente me decían que necesitaba una solución que:

Redujera las consultas repetitivas a PostgreSQL.

Acelerara las respuestas de la API.

Permitiera escalar sin colapsar el servidor.

Aquí es donde entra en juego Redis como sistema de caché.

Pero como siempre....

Lo que parecía una integración sencilla, terminó llevándome por un camino lleno de errores y ajustes finos.

Te cuento cómo lo logré. 🔥


🔍 Problema: Consultas costosas y carga innecesaria en PostgreSQL

Sin caché, cada petición a la API generaba una consulta directa a PostgreSQL, lo que podía ralentizar la API conforme aumentara el tráfico.

Sabía que Redis era la solución, pero la integración no fue tan simple como esperaba.

🔴 Errores encontrados en la integración de Redis

1️⃣ Gunicorn falló al iniciar porque Flask no encontraba flask_caching ni redis-py.

2️⃣ Redis instalado, pero sin respuestas en caché. No almacenaba los datos correctamente.

3️⃣ Gunicorn no arrancaba correctamente. Apuntaba a una ruta incorrecta en gunicorn.service.


🛠️ Implementando Redis como caché en Flask

Después de varias pruebas, finalmente configuré Redis en el backend y lo integré con Flask.

✅ 1. Instalación y configuración de Redis en el VPS

sudo dnf install redis -y  
sudo systemctl enable redis --now  

Con esto, Redis quedó instalado y ejecutándose en el servidor.

✅ 2. Configuración de Redis en Flask con flask_caching

Añadí la configuración de caché en app.py:

from flask_caching import Cache

app.config['CACHE_TYPE'] = 'RedisCache'
app.config['CACHE_REDIS_HOST'] = '127.0.0.1'
app.config['CACHE_REDIS_PORT'] = 6379'
app.config['CACHE_REDIS_PASSWORD'] = None  # O tu contraseña si Redis está protegido
cache = Cache(app)

Esto permite que Redis almacene las respuestas en caché en lugar de hacer una consulta nueva cada vez.

✅ 3. Creación de un endpoint de prueba para Redis

@app.route('/test-cache')
def test_cache():
    cache.set('prueba', 'funciona', timeout=60)
    return jsonify({'cache': cache.get('prueba')})

Este endpoint me permitió verificar que Redis guardaba y devolvía datos correctamente.

✅ 4. Instalación de dependencias en el entorno virtual de Flask

Al ejecutar Gunicorn, encontré un error porque Flask no reconocía flask_caching ni redis-py. Solución:

source /var/www/saas/venv/bin/activate
pip install flask-caching redis
deactivate

Ahora Flask podía comunicarse con Redis correctamente.

✅ 5. Corrección de Gunicorn para apuntar al puerto correcto

Gunicorn no encontraba app.py y se quedaba colgado.

Además, revisé y corregí la configuración en gunicorn.service:

sudo nano /etc/systemd/system/gunicorn.service

Asegurando que Gunicorn corriera con la configuración correcta:

ExecStart=/var/www/saas/venv/bin/gunicorn --chdir /var/www/saas -w 4 -b 0.0.0.0:AQUÍ_VA_EL_PUERTO app:app

Finalmente, reinicié Gunicorn y Redis, y todo empezó a funcionar correctamente. 🎉

sudo systemctl restart redis
sudo systemctl restart gunicorn

redis-cache-mejora-rendimiento

🔄 Prueba final: ¿Redis realmente está funcionando?

Ejecuté una prueba accediendo al endpoint /test-cache:

curl http://127.0.0.1:AQUÍ_VA_EL_PUERTO/test-cache

Salida esperada:

{"cache": "funciona"}

✅ Redis estaba almacenando y devolviendo datos correctamente. Misión cumplida.


💡 Lecciones aprendidas

🔹 Redis es un boost enorme para el rendimiento

Sin caché, la API responde mucho más lento y genera carga innecesaria en PostgreSQL.

Pues con Redis se permite respuestas instantáneas en peticiones repetidas.

🔹 Instalar dependencias en el entorno virtual es crucial

Si usas Gunicorn, las dependencias deben instalarse dentro del entorno virtual o Flask no podrá encontrarlas.

🔹 Gunicorn debe apuntar a la ruta correcta

Si la configuración en gunicorn.service no está bien, Gunicorn no arrancará o lo hará con errores.

🔹 La documentación y los logs son clave

Cada error en la integración de Redis tenía una solución clara en los logs y la documentación de Flask-Caching y Gunicorn.


🚀 Próximos pasos

Ahora que Redis está funcionando, el siguiente paso me acerca más a mi objetivo de lanzar este SaaS. 🔥🚀

➡️ ¿Ya usas Redis en tu API?

¿Qué estrategias de caché utilizas para mejorar el rendimiento?

 

Si quieres conocer otros artículos parecidos a Cómo Integré Redis en mi API para Mejorar el Rendimiento 🚀 - Episodio 20 puedes visitar la categoría Proyecto-IA.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir