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, что сделает ваше приложение ещё быстрее.

1
Задача
Модуль 4: FastAPI, 9 уровень, 2 лекция
Недоступна
Установка Redis
Установка Redis
1
Задача
Модуль 4: FastAPI, 9 уровень, 2 лекция
Недоступна
Подключение Redis к FastAPI
Подключение Redis к FastAPI
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ