в сегодняшнем цифровом мире каждое действие - независимо от того, проводят ли он приложение для знакомств или завершает покупку - религиозные API, работающие эффективно за кулисами. Как застройщики, мы знаем, что каждая миллисекунд имеет значение. Но как мы можем заставить API реагировать быстрее? Ответ заключается в кэшировании.
]кэширование - это метод, который хранит часто доступ к данным в памяти, позволяя API -интерфейсам мгновенно реагировать, а не запрашивать более медленную базу данных каждый раз. Подумайте об этом, как о том, чтобы сохранить ключевые ингредиенты (соль, перец, масло) на вашей кухонной столешнице вместо того, чтобы приносить их из кладовой каждый раз, когда вы готовите - это экономит время и делает процесс более эффективным. Аналогичным образом, кэширование сокращает время отклика API, сохраняя общепринятые данные в быстром, доступном месте, как Redis.
] для подключения с кэшем Redis с Fastapi мы требуем, чтобы следующие библиотеки были предварительно установлены.
]
pip install fastapi uvicorn aiocache pydantic]
Pydantic предназначен для создания таблиц и структур баз данных. AIOCACE будет выполнять асинхронные операции на кэше. Uvicorn отвечает за работу сервера.
]Настройка Redis непосредственно в системе Windows невозможна в этом этапе. Следовательно, он должен быть настроен и запускаться в подсистеме Windows для Linux. Инструкции по установке WSL приведены ниже
] ] post Установка WSL, необходимы следующие команды для установки Redis
]
sudo apt update sudo apt install redis-server sudo systemctl start redis]
для тестирования подключения сервера Redis используется следующая команда
redis-cli]
после этой команды он вступит в виртуальный терминал порта 6379. В этом терминале команды REDIS могут быть введены и протестированы.
]давайте создадим простое приложение FASTAPI, которое получает информацию пользователя и кэширует ее для будущих запросов. Мы будем использовать Redis для хранения кэшированных ответов.
мы будем использовать Pydantic для определения нашей пользовательской модели, которая представляет собой структуру ответа API.
]
from pydantic import BaseModel class User(BaseModel): id: int name: str email: str age: int]
, чтобы не повторять логику кэширования для каждой конечной точки, мы создадим многоразовый декоратор кэширования, используя библиотеку 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]
теперь мы будем реализовать маршрут 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]
запустите свое приложение 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, что делает ответ быстрее и уменьшает нагрузку в базе данных.
]через 120 секунд истекает запись в кэш, и данные снова извлекаются из базы данных в следующем запросе, обновляя кэш.
]в этом уроке мы продемонстрировали, как реализовать кэширование Redis в приложении Fastapi, используя простой пример данных пользователя. Кэшируя ответы API, вы можете значительно улучшить производительность вашего приложения, особенно для данных, которые не часто меняются.
], пожалуйста, выполните и поделитесь, если вы найдете эту статью полезной.
] ] ]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3