JavaRush /Курси /Модуль 4: FastAPI /Встановлення Redis та підключення до FastAPI

Встановлення Redis та підключення до FastAPI

Модуль 4: FastAPI
Рівень 9 , Лекція 2
Відкрита

Redis — це простий, потужний і дуже швидкий інструмент для кешування даних. Зберігання даних у оперативній пам'яті дає майже миттєвий доступ. Сьогодні ми навчимося:

  1. Встановлювати Redis на локальній машині.
  2. Налаштовувати FastAPI для роботи з Redis.
  3. Виконувати базові операції через Redis і FastAPI: додавати дані, читати їх і видаляти.

Поїхали!


Встановлення Redis

У Windows

Встановлення Redis на Windows стало трохи складнішим, бо офіційно Redis орієнтований на Linux. Але є обхідний шлях:

  1. Зайди на https://github.com/microsoftarchive/redis/releases.
  2. Скачай redis-x64-{version}.zip.
  3. Розпакуй архів у зручне для тебе місце.
  4. Зайди в папку, відкрий термінал і запусти сервер:
    redis-server.exe
    

Тепер Redis працює на твоєму комп'ютері. Можеш перевірити його роботу, відкривши інший термінал і ввівши:

redis-cli

Спробуй команду:

PING

Повинен з'явитися відповідь PONG. Це Redis каже: «Привіт, я тут!».

У Linux

Спочатку онови список репозиторіїв:

sudo apt update

Встанови Redis:

sudo apt install redis

Запусти Redis:

sudo systemctl start redis

Перевір його статус:

sudo systemctl status redis

І, звичайно, введи redis-cli і спробуй команду PING, щоб переконатися, що все працює.


Підключення до FastAPI

Тепер, коли Redis встановлений, давай підключимо його до нашого додатка FastAPI за допомогою Python-бібліотеки redis-py. Ця бібліотека дозволяє нам взаємодіяти з Redis з FastAPI просто й зручно.

Для початку встановимо redis-py:

pip install redis

Якщо плануєш використовувати асинхронні операції, рекомендую встановити aioredis:

pip install aioredis

Додамо базове підключення Redis у наш додаток FastAPI. Ось простий приклад:


from fastapi import FastAPI
import redis

app = FastAPI()

# Створюємо підключення до Redis
redis_client = redis.StrictRedis(host="localhost", port=6379, decode_responses=True)

@app.get("/")
def read_root():
    # Записуємо значення в Redis
    redis_client.set("hello", "world")

    # Читаємо значення з Redis
    value = redis_client.get("hello")
    
    return {"Redis says": value}

Примітка:

  • host="localhost" вказує, що сервер Redis працює локально.
  • port=6379 — стандартний порт Redis.
  • decode_responses=True дозволяє працювати з даними у вигляді рядків, а не байтів.

Асинхронне підключення з aioredis

Якщо ти використовуєш асинхронні операції в FastAPI, то aioredis — твій кращий друг:


from fastapi import FastAPI
import aioredis

app = FastAPI()

# Вказуємо URL підключення до Redis
REDIS_URL = "redis://localhost"

@app.on_event("startup")
async def startup_event():
    # Підключаємося до Redis при запуску додатка
    app.state.redis = await aioredis.from_url(REDIS_URL, decode_responses=True)

@app.on_event("shutdown")
async def shutdown_event():
    # Закриваємо підключення до Redis при завершенні роботи додатка
    await app.state.redis.close()

@app.get("/")
async def read_root():
    redis = app.state.redis

    # Асинхронно записуємо дані в Redis
    await redis.set("hello", "world")

    # Асинхронно читаємо дані з Redis
    value = await redis.get("hello")
    
    return {"Redis says": value}

Що тут нового? Ми використовуємо декоратори @on_event для керування життєвим циклом нашого додатка:

  • startup_event: підключаємося до Redis при запуску.
  • shutdown_event: закриваємо з'єднання при завершенні.

Перша взаємодія з Redis

Тепер давай спробуємо виконати кілька операцій за допомогою нашої бібліотеки. Ми вже бачили, як додавати і отримувати дані. Давай заглибимося трохи більше.

Запис даних у Redis

redis_client.set("key", "value")

Читання даних з Redis


value = redis_client.get("key")
print(value)  # "value"

Видалення даних

redis_client.delete("key")

Лічильники та інкременти.
Redis підтримує вбудовані числові операції:


redis_client.set("counter", 1)
redis_client.incr("counter")  # Збільшує значення на 1
print(redis_client.get("counter"))  # 2

Приклад з FastAPI

Припустимо, ти хочеш створити просте API для роботи з ключами-значеннями:


@app.post("/set/{key}/{value}")
async def set_value(key: str, value: str):
    redis = app.state.redis
    await redis.set(key, value)
    return {"message": f"Key '{key}' set to '{value}'"}

@app.get("/get/{key}")
async def get_value(key: str):
    redis = app.state.redis
    value = await redis.get(key)
    if value is None:
        return {"error": f"Key '{key}' not found"}
    return {"value": value}

Спробуй відправити POST-запит на /set/test/123 і потім виконай GET-запит на /get/test. Ти повинен отримати "123".


Типові помилки та підводні камені

Робота з Redis виглядає просто, але є кілька речей, які можуть викликати проблеми:

  1. Redis-сервер не працює. Переконайся, що сервер Redis запущений. Перевір це командою:
    redis-cli ping
    
    Відповідь PONG означає, що сервер працює.
  2. Помилка підключення. Переконайся, що вказані правильні host і port. Наприклад, якщо Redis запущений у Docker, хостом може бути 127.0.0.1 або навіть ім'я контейнера.
  3. TTL і застарілі дані. Якщо ти використовуєш expire або setex, дані можуть раптово зникати. Переконайся, що для критично важливих даних TTL не використовується.

Застосування в реальних проєктах

Підключення Redis до FastAPI відкриває багато можливостей:

  • Кешування відповідей API.
  • Зберігання сесій користувачів.
  • Реалізація лічильників і обмежень за частотою запитів (rate limiting).
  • Зберігання тимчасових даних, таких як токени для підтвердження email.

Redis часто використовується в високонавантажених системах. Наприклад, популярні платформи, такі як Twitter і GitHub, використовують Redis для кешування та управління чергами.


Тепер у тебе є базові навички для встановлення Redis і підключення його до FastAPI. У наступній лекції ми розглянемо, як налаштувати кешування запитів до бази даних через Redis, щоб зробити твій додаток ще швидшим.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ