В FastAPI появилась официальная интеграция с Redis. Работая над fastapi-redis-sdk, мы тесно сотрудничали с командой FastAPI, чтобы понять, как должна выглядеть естественно интегрированная работа с Redis, следуя модели зависимостей FastAPI, а не навязывая Redis паттерны, чуждые этому фреймворку.
Результатом стал нативный способ использования Redis в FastAPI: управление соединениями привязано к жизненному циклу приложения, синхронные и асинхронные зависимости доступны «из коробки», а кэширование органично вписывается в механизм внедрения зависимостей. SDK также предоставляет практические инструменты для HTTP-кэширования и заголовков Cache-Control, выходя за рамки простого подключения и делая привычные веб-паттерны первоклассными гражданами фреймворка.
Библиотеку fastapi-redis-sdk можно использовать со всеми вариантами FastAPI: как при самостоятельном управлении, так и в FastAPI Cloud — новой управляемой платформе для развертывания и эксплуатации приложений FastAPI. FastAPI Cloud сейчас находится в стадии публичного бета-тестирования, и Redis Cloud доступен там как нативная интеграция. Это дает пользователям простой способ подключить существующую базу данных Redis или создать новую бесплатно прямо из панели управления FastAPI Cloud. Это сокращает путь к запуску сервисов в продакшн и снижает трудозатраты, позволяя поддерживать кэширование уже сегодня и использовать другие возможности, находящиеся в разработке в рамках официально поддерживаемого SDK fastapi-redis-sdk.
Использование SDK
Установка пакета так же проста, как и любого другого пакета, доступного в PyPI:
Затем, чтобы привязать SDK к жизненному циклу вашего приложения, необходимо вызвать:
Кэширование данных
Теперь вы готовы использовать функциональность кэширования фреймворка. Просто используйте внедрение зависимостей и настройте правило кэширования:
Таким образом, всё необходимое уже сделано за вас:
- GET-эндпоинт кэшируется с временем жизни (TTL) 60 секунд, поэтому повторные запросы для одного и того же идентификатора пользователя будут извлекаться из кэша Redis, а не из базы данных.
- DELETE-эндпоинт автоматически аннулирует любые записи в кэше для предоставленного ID.
- PUT-эндпоинт может выполнять магию: если операция сохранения прошла успешно (и только в этом случае), мы обновим кэш новым сохраненным значением, избавив от необходимости выполнять первый GET-запрос после этого.
Группы вытеснения (eviction groups), с другой стороны, могут использоваться для идентификации данных, которые должны удаляться вместе, что помогает улучшить согласованность кэша в случаях, когда некоторые кэшированные записи имеют смысл только в связке. Однако это имеет свою цену: чтобы сделать операцию вытеснения атомарной, данные сохраняются в одном слоте в случае кластерной среды.
Чтобы узнать больше о кэшировании, посетите раздел кэширования в нашем руководстве.
Ограничение частоты запросов (Rate limiting)
Аналогичным образом вам нужно настроить SDK для отслеживания правил ограничения частоты запросов:
Затем это делается так же просто:
Или, если вы хотите обрабатывать как кратковременные всплески, так и постоянную нагрузку, вы можете объединить две отдельные декларации лимитов с разными областями видимости, чтобы они учитывались отдельно и не перезаписывали друг друга:
Подробнее об ограничении частоты запросов можно узнать в соответствующем разделе онлайн-руководства.
Конфигурация
Библиотека fastapi-redis-sdk следует модели конфигурации Pydantic Settings, как рекомендует команда FastAPI, для обеспечения переносимости и безопасности типов. Обычно (в облачных средах, таких как FastAPI Cloud) параметры конфигурации внедряются как переменные окружения; если имена указаны верно, они будут автоматически подхвачены развернутыми эндпоинтами.
Таким образом, для облачных сред конфигурация будет выглядеть так:
В средах разработки вы можете использовать отдельные файлы .env:
Полный список параметров конфигурации можно увидеть в соответствующем разделе руководства.
Продвинутые рецепты
При внедрении CacheBackend или RateLimitBackend в ваши эндпоинты (синхронные или асинхронные — это работает для обоих) вы можете реализовать продвинутые рецепты кэширования и ограничения запросов, включая, помимо прочего, перечисленные ниже.
Кэширование
Условное кэширование: кэшировать только при выполнении определенных бизнес-правил.
Каскадное аннулирование: между группами вытеснения или когда группы вытеснения не могут быть использованы.
Динамический TTL: установка времени жизни на основе самих данных.
Конечно, все эти паттерны можно комбинировать для решения сложных задач. Дополнительную информацию см. в разделе руководства, посвященном этим темам.
Ограничение частоты запросов
Ограничение нижестоящего ресурса: когда вы хотите защитить ресурс, от которого зависит ваш эндпоинт, а не сам эндпоинт.
Справедливость для арендаторов (Per-tenant fairness): когда у вас есть «шумный» арендатор в мультиарендной среде.
Бюджет токенов: вычисление стоимости во время выполнения на основе использования.
Попробуйте сегодня
Если вы хотите попробовать SDK, ознакомьтесь с репозиторием, руководством и пакетом PyPI. Мы будем рады, если вы протестируете его, поделитесь отзывами и предложите улучшения или новые функции.









