«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Кэш в FASTAPI: включить высокоэффективную разработку

Кэш в FASTAPI: включить высокоэффективную разработку

Опубликовано в 2025-04-17
Просматривать:360

в сегодняшнем цифровом мире каждое действие - независимо от того, проводят ли он приложение для знакомств или завершает покупку - религиозные API, работающие эффективно за кулисами. Как застройщики, мы знаем, что каждая миллисекунд имеет значение. Но как мы можем заставить API реагировать быстрее? Ответ заключается в кэшировании.

]

кэширование - это метод, который хранит часто доступ к данным в памяти, позволяя API -интерфейсам мгновенно реагировать, а не запрашивать более медленную базу данных каждый раз. Подумайте об этом, как о том, чтобы сохранить ключевые ингредиенты (соль, перец, масло) на вашей кухонной столешнице вместо того, чтобы приносить их из кладовой каждый раз, когда вы готовите - это экономит время и делает процесс более эффективным. Аналогичным образом, кэширование сокращает время отклика API, сохраняя общепринятые данные в быстром, доступном месте, как Redis.

]

] Требуемые библиотеки, которые будут установлены

]

для подключения с кэшем Redis с Fastapi мы требуем, чтобы следующие библиотеки были предварительно установлены.
]

]
pip install fastapi uvicorn aiocache pydantic
]

Pydantic предназначен для создания таблиц и структур баз данных. AIOCACE будет выполнять асинхронные операции на кэше. Uvicorn отвечает за работу сервера.

]

] Установка и проверка Redis:

]

Настройка Redis непосредственно в системе Windows невозможна в этом этапе. Следовательно, он должен быть настроен и запускаться в подсистеме Windows для Linux. Инструкции по установке WSL приведены ниже

]
]
] Caching in FastAPI: Unlocking High-Performance Development:]
]
]

] Установите WSL | Microsoft Learn

]

] Установите подсистему Windows для Linux с командой WSL -Install. Используйте терминал Bash на вашей машине Windows, заполненной вашим предпочтительным дистрибуцией Linux - Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine и многое другое доступно.

]
] Learn.microsoft.com
]
]
]

post Установка WSL, необходимы следующие команды для установки Redis
]

]
sudo apt update
sudo apt install redis-server
sudo systemctl start redis
]

для тестирования подключения сервера Redis используется следующая команда

]
redis-cli
]

после этой команды он вступит в виртуальный терминал порта 6379. В этом терминале команды REDIS могут быть введены и протестированы.

]

] Настройка приложения FASTAPI

]

давайте создадим простое приложение FASTAPI, которое получает информацию пользователя и кэширует ее для будущих запросов. Мы будем использовать Redis для хранения кэшированных ответов.

] Шаг 1: Определите модель Pydantic для пользовательских данных

]

мы будем использовать Pydantic для определения нашей пользовательской модели, которая представляет собой структуру ответа API.
]

]
from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
    email: str
    age: int
]

] Шаг 2: Создайте декоратор кэширования

]

, чтобы не повторять логику кэширования для каждой конечной точки, мы создадим многоразовый декоратор кэширования, используя библиотеку AIOCACE. Этот декоратор попытается получить ответ от Redis, прежде чем вызовать фактическую функцию.
]

]
import json
from functools import wraps
from aiocache import Cache
from fastapi import HTTPException

def cache_response(ttl: int = 60, namespace: str = "main"):
    """
    Caching decorator for FastAPI endpoints.

    ttl: Time to live for the cache in seconds.
    namespace: Namespace for cache keys in Redis.
    """
    def decorator(func):
        @wraps(func)
        async def wrapper(*args, **kwargs):
            user_id = kwargs.get('user_id') or args[0]  # Assuming the user ID is the first argument
            cache_key = f"{namespace}:user:{user_id}"

            cache = Cache.REDIS(endpoint="localhost", port=6379, namespace=namespace)

            # Try to retrieve data from cache
            cached_value = await cache.get(cache_key)
            if cached_value:
                return json.loads(cached_value)  # Return cached data

            # Call the actual function if cache is not hit
            response = await func(*args, **kwargs)

            try:
                # Store the response in Redis with a TTL
                await cache.set(cache_key, json.dumps(response), ttl=ttl)
            except Exception as e:
                raise HTTPException(status_code=500, detail=f"Error caching data: {e}")

            return response
        return wrapper
    return decorator
]

] Шаг 3: Реализуйте маршрут FASTAPI для сведений пользователя

]

теперь мы будем реализовать маршрут FASTAPI, который получает информацию пользователя на основе идентификатора пользователя. Ответ будет кэширован с использованием Redis для более быстрого доступа в последующих запросах.
]

]
from fastapi import FastAPI

app = FastAPI()

# Sample data representing users in a database
users_db = {
    1: {"id": 1, "name": "Alice", "email": "[email protected]", "age": 25},
    2: {"id": 2, "name": "Bob", "email": "[email protected]", "age": 30},
    3: {"id": 3, "name": "Charlie", "email": "[email protected]", "age": 22},
}

@app.get("/users/{user_id}")
@cache_response(ttl=120, namespace="users")
async def get_user_details(user_id: int):
    # Simulate a database call by retrieving data from users_db
    user = users_db.get(user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")

    return user

]

] Шаг 4: Запустите приложение

]

запустите свое приложение FastAPI с запуска:
]

]
uvicorn main:app --reload
]

теперь вы можете протестировать API, получая данные пользователя через:
]

]
http://127.0.0.1:8000/users/1
]

Первый запрос принесет данные из users_db, но последующие запросы извлекут данные из Redis.

]

] Тестирование кэша

]

вы можете проверить кэш, осмотрев ключи, хранящиеся в Redis. Откройте Redis CLI:
]

]
redis-cli
KEYS *
]

вы получите все ключи, которые были сохранены в Redis до ttl.

] Как работает кэширование в этом примере

]

] Первый запрос

]

: когда пользовательские данные запрашиваются в первый раз, API извлекает его из базы данных (users_db) и сохраняет результат в Redis с временем к Live (TTL) 120 секунд.

]

] Последующие запросы:

]

любые последующие запросы для того же пользователя в период TTL обслуживаются непосредственно из Redis, что делает ответ быстрее и уменьшает нагрузку в базе данных.

]

] Ttl (время жить):

]

через 120 секунд истекает запись в кэш, и данные снова извлекаются из базы данных в следующем запросе, обновляя кэш.

]

] Заключение

]

в этом уроке мы продемонстрировали, как реализовать кэширование Redis в приложении Fastapi, используя простой пример данных пользователя. Кэшируя ответы API, вы можете значительно улучшить производительность вашего приложения, особенно для данных, которые не часто меняются.

]

, пожалуйста, выполните и поделитесь, если вы найдете эту статью полезной.

] ] ]
Заявление о выпуске Эта статья воспроизводится по адресу: https://dev.to/sivakumarmanoharan/caching-in-fastapi-unlocking-high-performance-development-20ej?1 Если есть какое-либо нарушение, пожалуйста, свяжитесь с учебным пособием[email protected], чтобы удалить его.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3