亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Heim Backend-Entwicklung Python-Tutorial Maximieren Sie Ihre FastAPI-Effizienz: Blitzschnelle Implementierung von Caching und Sperren mit py-cachify

Maximieren Sie Ihre FastAPI-Effizienz: Blitzschnelle Implementierung von Caching und Sperren mit py-cachify

Dec 05, 2024 am 05:47 AM

Maximize Your FastAPI Efficiency: Blazingly Fast Implementation of Caching and Locking with py-cachify

In der schnelllebigen Welt der Webentwicklung ist Leistung von gr??ter Bedeutung. Effiziente Caching-Mechanismen k?nnen die Reaktionsf?higkeit Ihrer API erheblich verbessern, indem sie redundante Berechnungen und Datenbankabfragen reduzieren. In diesem Artikel erfahren Sie, wie Sie die py-cachify-Bibliothek mithilfe von SQLModel und Redis in eine FastAPI-Anwendung integrieren, um Caching und Parallelit?tskontrolle zu implementieren.

Inhaltsverzeichnis:

  • Einführung
  • Projekt-Setup
  • Datenbankmodelle mit SQLModel erstellen
  • FastAPI-Endpunkte erstellen
  • Endpunktergebnisse zwischenspeichern
  • Sperren der Ausführung von Update-Endpunkten
  • Ausführen der Anwendung
  • Fazit

Einführung

Caching ist eine leistungsstarke Technik zur Verbesserung der Leistung von Webanwendungen, indem die Ergebnisse kostspieliger Vorg?nge gespeichert und aus einem Schnellzugriffsspeicher bereitgestellt werden. Mit py-cachify k?nnen wir Caching nahtlos zu unseren FastAPI-Anwendungen hinzufügen und dabei Redis für die Speicherung nutzen. Darüber hinaus bietet py-cachify Tools zur Parallelit?tskontrolle, die Race Conditions bei kritischen Vorg?ngen verhindern.

In diesem Tutorial gehen wir durch die Einrichtung der py-cachify-Bibliothek in einer FastAPI-Anwendung mit SQLModel für ORM und Redis für das Caching.

Projekt-Setup

Beginnen wir mit der Einrichtung unserer Projektumgebung.

Voraussetzungen

  • Python 3.12
  • Poesie (Sie k?nnen einen beliebigen Paketmanager verwenden)
  • Redis-Server l?uft lokal oder ist remote zug?nglich

Abh?ngigkeiten installieren

Starten Sie ein neues Projekt über Poesie:

# create new project
poetry new --name app py-cachify-fastapi-demo

# enter the directory
cd py-cachify-fastapi-demo

# point poetry to use python3.12
poetry env use python3.12

# add dependencies
poetry add "fastapi[standard]" sqlmodel aiosqlite redis py-cachify
  • FastAPI: Das Web-Framework zum Erstellen unserer API.
  • SQLModel aiosqlite: Kombiniert SQLAlchemy und Pydantic für ORM und Datenvalidierung.
  • Redis: Python-Client für die Interaktion mit Redis.
  • py-cachify: Caching- und Sperrdienstprogramme.

Py-Cachify wird initialisiert

Bevor wir py-cachify verwenden k?nnen, müssen wir es mit unseren Redis-Clients initialisieren. Wir tun dies mithilfe des Lebensdauerparameters von FastAPI.

# app/main.py
from contextlib import asynccontextmanager
from fastapi import FastAPI
from py_cachify import init_cachify
from redis.asyncio import from_url


@asynccontextmanager
async def lifespan(_: FastAPI):
    init_cachify(
        # Replace with your redis url if it differs
        async_client=from_url('redis://localhost:6379/0'),
    )
    yield


app = FastAPI(lifespan=lifespan)

Innerhalb der Lebensspanne:

  • Erstellen Sie einen asynchronen Redis-Client.
  • Py-Cachify mit diesem Client initialisieren.

Erstellen von Datenbankmodellen mit SQLModel

Wir erstellen ein einfaches Benutzermodell für die Interaktion mit unserer Datenbank.

# app/db.py
from sqlmodel import Field, SQLModel


class User(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    name: str
    email: str

Richten Sie die Datenbank-Engine ein und erstellen Sie die Tabellen in der Lifespan-Funktion:

# app/db.py

# Adjust imports
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine


# Add the following at the end of the file
sqlite_file_name = 'database.db'
sqlite_url = f'sqlite+aiosqlite:///{sqlite_file_name}'
engine = create_async_engine(sqlite_url, echo=True)
session_maker = async_sessionmaker(engine)


# app/main.py
# Adjust imports and lifespan function
from sqlmodel import SQLModel

from .db import engine


@asynccontextmanager
async def lifespan(_: FastAPI):
    init_cachify(
        async_client=from_url('redis://localhost:6379/0'),
    )
    # Create SQL Model tables
    async with engine.begin() as conn:
        await conn.run_sync(SQLModel.metadata.create_all)

    yield

Hinweis: Der Einfachheit halber verwenden wir SQLite, Sie k?nnen jedoch jede von SQLAlchemy unterstützte Datenbank verwenden.

Erstellen von FastAPI-Endpunkten

Lassen Sie uns Endpunkte erstellen, um mit unserem Benutzermodell zu interagieren.

# create new project
poetry new --name app py-cachify-fastapi-demo

# enter the directory
cd py-cachify-fastapi-demo

# point poetry to use python3.12
poetry env use python3.12

# add dependencies
poetry add "fastapi[standard]" sqlmodel aiosqlite redis py-cachify

Endpunktergebnisse zwischenspeichern

Lassen Sie uns nun die Ergebnisse des Endpunkts read_user zwischenspeichern, um unn?tige Datenbankabfragen zu vermeiden.

Der Endpunktcode sieht folgenderma?en aus:

# app/main.py
from contextlib import asynccontextmanager
from fastapi import FastAPI
from py_cachify import init_cachify
from redis.asyncio import from_url


@asynccontextmanager
async def lifespan(_: FastAPI):
    init_cachify(
        # Replace with your redis url if it differs
        async_client=from_url('redis://localhost:6379/0'),
    )
    yield


app = FastAPI(lifespan=lifespan)

Mit dem @cached-Dekorator:

  • Wir geben einen eindeutigen Schlüssel mithilfe der Benutzer-ID an.
  • Stellen Sie die TTL (Time-to-Live) auf 5 Minuten (300 Sekunden) ein.
  • Aufeinanderfolgende Aufrufe dieses Endpunkts mit derselben Benutzer-ID innerhalb von 5 Minuten geben das zwischengespeicherte Ergebnis zurück.

Cache bei Updates zurücksetzen

Wenn die Daten eines Benutzers aktualisiert werden, müssen wir den Cache zurücksetzen, um sicherzustellen, dass Kunden die neuesten Informationen erhalten. Um dies zu erreichen, ?ndern wir den Endpunkt update_user.

# app/db.py
from sqlmodel import Field, SQLModel


class User(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    name: str
    email: str

Durch den Aufruf von read_user.reset(user_id=user_id) führen wir Folgendes aus:

  • L?schen Sie die zwischengespeicherten Daten für die spezifische Benutzer-ID.
  • Stellen Sie sicher, dass nachfolgende GET-Anfragen aktuelle Daten aus der Datenbank abrufen.

Darunter umschlie?t der zwischengespeicherte Dekorator Ihre Funktion dynamisch und fügt die .reset-Methode hinzu. Diese Methode ahmt die Signatur und den Typ der Funktion nach. Auf diese Weise ist sie je nach Originalfunktion entweder synchron oder asynchron und akzeptiert dieselben Argumente.

Die .reset-Methode verwendet dieselbe Schlüsselgenerierungslogik, die im zwischengespeicherten Dekorator definiert ist, um zu identifizieren, welcher zwischengespeicherte Eintrag ungültig gemacht werden soll. Wenn Ihr Caching-Schlüsselmuster beispielsweise ?user-{user_id}“ lautet, zielt der Aufruf von ?await read_user.reset(user_id=123)“ speziell auf den Cache-Eintrag für ?user_id=123“ ab und l?scht ihn.

Sperren der Ausführung von Update-Endpunkten

Um Race Conditions w?hrend Updates zu verhindern, verwenden wir den Once Decorator, um die Ausführung des Update-Endpunkts zu sperren.

# app/db.py

# Adjust imports
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine


# Add the following at the end of the file
sqlite_file_name = 'database.db'
sqlite_url = f'sqlite+aiosqlite:///{sqlite_file_name}'
engine = create_async_engine(sqlite_url, echo=True)
session_maker = async_sessionmaker(engine)


# app/main.py
# Adjust imports and lifespan function
from sqlmodel import SQLModel

from .db import engine


@asynccontextmanager
async def lifespan(_: FastAPI):
    init_cachify(
        async_client=from_url('redis://localhost:6379/0'),
    )
    # Create SQL Model tables
    async with engine.begin() as conn:
        await conn.run_sync(SQLModel.metadata.create_all)

    yield

Mit einmal:

  • Wir sperren die Funktion basierend auf der Benutzer-ID.
  • Wenn eine andere Anfrage gleichzeitig versucht, denselben Benutzer zu aktualisieren, wird die Antwort sofort mit dem Statuscode 226 IM verwendet zurückgegeben.
  • Dies verhindert gleichzeitige Aktualisierungen, die zu inkonsistenten Daten führen k?nnten.

Optional k?nnen Sie @once so konfigurieren, dass eine Ausnahme ausgel?st wird oder ein bestimmter Wert zurückgegeben wird, wenn die Sperre bereits erworben wurde.

Ausführen der Anwendung

Jetzt ist es an der Zeit, unsere App auszuführen und zu testen!

1) Starten Sie den Redis-Server:

Stellen Sie sicher, dass Ihr Redis-Server lokal l?uft oder remote zug?nglich ist. Sie k?nnen einen lokalen Redis-Server mit Docker starten:

# app/main.py

# Adjust imports
from fastapi import Depends, FastAPI
from sqlalchemy.ext.asyncio import AsyncSession

from .db import User, engine, session_maker


# Database session dependency
async def get_session():
    async with session_maker() as session:
        yield session


app = FastAPI(lifespan=lifespan)


@app.post('/users/')
async def create_user(user: User, session: AsyncSession = Depends(get_session)) -> User:
    session.add(user)
    await session.commit()
    await session.refresh(user)
    return user


@app.get('/users/{user_id}')
async def read_user(user_id: int, session: AsyncSession = Depends(get_session)) -> User | None:
    return await session.get(User, user_id)


@app.put('/users/{user_id}')
async def update_user(user_id: int, new_user: User, session: AsyncSession = Depends(get_session)) -> User | None:
    user = await session.get(User, user_id)
    if not user:
        return None

    user.name = new_user.name
    user.email = new_user.email

    session.add(user)
    await session.commit()
    await session.refresh(user)

    return user

2) Führen Sie die FastAPI-Anwendung aus:

Sobald alles eingerichtet ist, k?nnen Sie Ihre FastAPI-Anwendung mit Poetry starten. Navigieren Sie zum Stammverzeichnis Ihres Projekts und führen Sie den folgenden Befehl aus:

# app/main.py

# Add the import
from py_cachify import cached


@app.get('/users/{user_id}')
@cached('read_user-{user_id}', ttl=300)  # New decorator
async def read_user(user_id: int, session: AsyncSession = Depends(get_session)) -> User | None:
    return await session.get(User, user_id)

3) Testen und Spielen mit Caching und Sperren:

Caching: Fügen Sie eine Verz?gerung hinzu (z. B. mit asyncio.sleep) in der read_user-Funktion, um eine lang laufende Berechnung zu simulieren. Beobachten Sie, wie sich die Reaktionszeit drastisch verbessert, sobald das Ergebnis zwischengespeichert wird.

Beispiel:

# create new project
poetry new --name app py-cachify-fastapi-demo

# enter the directory
cd py-cachify-fastapi-demo

# point poetry to use python3.12
poetry env use python3.12

# add dependencies
poetry add "fastapi[standard]" sqlmodel aiosqlite redis py-cachify

Gleichzeitigkeit und Sperren: Führen Sie in ?hnlicher Weise eine Verz?gerung in der update_user-Funktion ein, um das Verhalten von Sperren zu beobachten, wenn gleichzeitige Aktualisierungsversuche durchgeführt werden.

Beispiel:

# app/main.py
from contextlib import asynccontextmanager
from fastapi import FastAPI
from py_cachify import init_cachify
from redis.asyncio import from_url


@asynccontextmanager
async def lifespan(_: FastAPI):
    init_cachify(
        # Replace with your redis url if it differs
        async_client=from_url('redis://localhost:6379/0'),
    )
    yield


app = FastAPI(lifespan=lifespan)

Diese Verz?gerungen k?nnen Ihnen helfen, die Wirksamkeit von Caching- und Sperrmechanismen in Aktion zu sehen, da nachfolgende Lesevorg?nge aufgrund des Cachings schneller sein sollten und gleichzeitige Schreibvorg?nge auf dieselbe Ressource durch Sperren effektiv verwaltet werden sollten.

Jetzt k?nnen Sie Ihre Endpunkte mit einem Tool wie Postman oder unter http://127.0.0.1:8000/docs testen (wenn die App ausgeführt wird!) und die Leistungsverbesserungen und Parallelit?tskontrollen in Aktion beobachten.

Viel Spa? beim Experimentieren mit Ihrer erweiterten FastAPI-App!

Abschluss

Durch die Integration von py-cachify in unsere FastAPI-Anwendung haben wir eine Fülle von Vorteilen freigeschaltet, die sowohl die Leistung als auch die Zuverl?ssigkeit unserer API verbessern.

Lassen Sie uns einige der wichtigsten St?rken noch einmal zusammenfassen:

  • Verbesserte Leistung: Durch das Zwischenspeichern sich wiederholender Funktionsaufrufe werden redundante Berechnungen und Datenbanktreffer reduziert, wodurch die Antwortzeiten drastisch verbessert werden.
  • Parallelit?tskontrolle: Mit integrierten Sperrmechanismen verhindert py-cachify Race Conditions und stellt die Datenkonsistenz sicher – entscheidend für Anwendungen mit hohem gleichzeitigem Zugriff.
  • Flexibilit?t: Unabh?ngig davon, ob Sie mit synchronen oder asynchronen Vorg?ngen arbeiten, passt sich py-cachify nahtlos an und ist somit eine vielseitige Wahl für moderne Webanwendungen.
  • Benutzerfreundlichkeit: Die Bibliothek l?sst sich reibungslos in g?ngige Python-Frameworks wie FastAPI integrieren, sodass Sie mit minimaler Reibung loslegen k?nnen.
  • Vollst?ndige Typanmerkungen: py-cachify ist vollst?ndig typannotiert und hilft dabei, mit minimalem Aufwand besseren, wartbareren Code zu schreiben.
  • Minimaler Setup: Wie in diesem Tutorial gezeigt, erfordert das Hinzufügen von py-cachify nur ein paar zus?tzliche Zeilen zus?tzlich zu Ihrem bestehenden Setup, um seine Funktionen voll auszusch?pfen.

Für diejenigen, die mehr erfahren m?chten, schauen Sie sich das GitHub-Repository von py-cachify und die offizielle Dokumentation an, um ausführlichere Anleitungen, Tutorials und Beispiele zu erhalten.

Sie k?nnen hier auf den vollst?ndigen Code für dieses Tutorial auf GitHub zugreifen. Klonen Sie gerne das Repository und experimentieren Sie mit der Implementierung, um sie an die Anforderungen Ihres Projekts anzupassen.

Wenn Sie py-cachify nützlich finden, sollten Sie das Projekt unterstützen, indem Sie ihm auf GitHub einen Stern geben! Ihre Unterstützung tr?gt dazu bei, weitere Verbesserungen und neue Funktionen voranzutreiben.

Viel Spa? beim Codieren!

Das obige ist der detaillierte Inhalt vonMaximieren Sie Ihre FastAPI-Effizienz: Blitzschnelle Implementierung von Caching und Sperren mit py-cachify. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1488
72
Wie man mit der API -Authentifizierung in Python umgeht Wie man mit der API -Authentifizierung in Python umgeht Jul 13, 2025 am 02:22 AM

Der Schlüssel zum Umgang mit der API -Authentifizierung besteht darin, die Authentifizierungsmethode korrekt zu verstehen und zu verwenden. 1. Apikey ist die einfachste Authentifizierungsmethode, die normalerweise in den Anforderungsheader- oder URL -Parametern platziert ist. 2. BasicAuth verwendet Benutzername und Kennwort für die Basis64 -Codierungsübertragung, die für interne Systeme geeignet ist. 3.. OAuth2 muss das Token zuerst über Client_id und Client_secret erhalten und dann das BearerToken in den Anforderungsheader bringen. V. Kurz gesagt, die Auswahl der entsprechenden Methode gem?? dem Dokument und das sichere Speichern der Schlüsselinformationen ist der Schlüssel.

Erkl?ren Sie Python -Behauptungen. Erkl?ren Sie Python -Behauptungen. Jul 07, 2025 am 12:14 AM

Assert ist ein Inssertion -Tool, das in Python zum Debuggen verwendet wird, und wirft einen Assertionerror aus, wenn der Zustand nicht erfüllt ist. Die Syntax ist eine geltende Bedingung sowie optionale Fehlerinformationen, die für die interne Logiküberprüfung geeignet sind, z. B. Parameterprüfung, Statusbest?tigung usw., k?nnen jedoch nicht für die Sicherheits- oder Benutzereingabeprüfung verwendet werden und sollten in Verbindung mit klaren Eingabeaufforderungen verwendet werden. Es ist nur zum Hilfsdebuggen in der Entwicklungsphase verfügbar, anstatt die Ausnahmebehandlung zu ersetzen.

Was sind Python -Iteratoren? Was sind Python -Iteratoren? Jul 08, 2025 am 02:56 AM

INPYTHON, ITERATORATORSAROBJECTSHATALWOULOUPING ThroughCollections Byimplementing__iter __ () und __Next __ (). 1) IteratorsworkviATheiterProtocol, verwendete __iter __ () toreturn thiteratorand__Next __ () torethentexteemtemuntemuntilstoperationSaised.2) und

Was sind Python -Typ -Hinweise? Was sind Python -Typ -Hinweise? Jul 07, 2025 am 02:55 AM

TypHintsinpythonsolvetheProblemofAmbiguityAndpotentialbugsindynamicalpedCodeByAllowingDevelopstospecifyexpectypes

Wie man über zwei Listen gleichzeitig python iteriert Wie man über zwei Listen gleichzeitig python iteriert Jul 09, 2025 am 01:13 AM

Eine gemeinsame Methode, um zwei Listen gleichzeitig in Python zu durchqueren, besteht darin, die Funktion ZIP () zu verwenden, die mehrere Listen in der Reihenfolge und die kürzeste ist. Wenn die Listenl?nge inkonsistent ist, k?nnen Sie iTertools.zip_longest () verwenden, um die l?ngste zu sein und die fehlenden Werte auszufüllen. In Kombination mit Enumerate () k?nnen Sie den Index gleichzeitig erhalten. 1.zip () ist pr?gnant und praktisch, geeignet für die Iteration gepaarte Daten; 2.zip_longest () kann den Standardwert beim Umgang mit inkonsistenten L?ngen einfüllen. 3.Enumerate (ZIP ()) kann w?hrend des Durchlaufens Indizes erhalten und die Bedürfnisse einer Vielzahl komplexer Szenarien erfüllen.

Python Fastapi Tutorial Python Fastapi Tutorial Jul 12, 2025 am 02:42 AM

Um moderne und effiziente APIs mit Python zu schaffen, wird Fastapi empfohlen. Es basiert auf Eingabeaufforderungen an Standardpython -Typ und kann automatisch Dokumente mit ausgezeichneter Leistung generieren. Nach der Installation von Fastapi und ASGI Server Uvicorn k?nnen Sie Schnittstellencode schreiben. Durch das Definieren von Routen, das Schreiben von Verarbeitungsfunktionen und die Rückgabe von Daten kann schnell APIs erstellt werden. Fastapi unterstützt eine Vielzahl von HTTP -Methoden und bietet automatisch generierte Swaggerui- und Redoc -Dokumentationssysteme. URL -Parameter k?nnen durch Pfaddefinition erfasst werden, w?hrend Abfrageparameter durch Einstellen von Standardwerten für Funktionsparameter implementiert werden k?nnen. Der rationale Einsatz pydantischer Modelle kann dazu beitragen, die Entwicklungseffizienz und Genauigkeit zu verbessern.

Wie man eine API mit Python testet Wie man eine API mit Python testet Jul 12, 2025 am 02:47 AM

Um die API zu testen, müssen Sie Pythons Anfragebibliothek verwenden. In den Schritten werden die Bibliothek installiert, Anfragen gesendet, Antworten überprüfen, Zeitüberschreitungen festlegen und erneut werden. Installieren Sie zun?chst die Bibliothek über PipinstallRequests. Verwenden Sie dann Requests.get () oder Requests.Post () und andere Methoden zum Senden von GET- oder Post -Anfragen. überprüfen Sie dann die Antwort. Fügen Sie schlie?lich Zeitüberschreitungsparameter hinzu, um die Zeitüberschreitungszeit festzulegen, und kombinieren Sie die Wiederholungsbibliothek, um eine automatische Wiederholung zu erreichen, um die Stabilit?t zu verbessern.

Einrichten und Verwenden von virtuellen Python -Umgebungen Einrichten und Verwenden von virtuellen Python -Umgebungen Jul 06, 2025 am 02:56 AM

Eine virtuelle Umgebung kann die Abh?ngigkeiten verschiedener Projekte isolieren. Der Befehl ist mit Pythons eigenem Venvidenmodul erstellt und ist Python-Mvenvenv. Aktivierungsmethode: Windows verwendet Env \ scripts \ aktivieren, macOS/Linux verwendet SourceEnv/bin/aktivieren; Das Installationspaket verwendet PipInstall, verwenden Sie Pipfreeze> Anforderungen.txt, um Anforderungsdateien zu generieren, und verwenden Sie Pipinstall-Rrequirements.txt, um die Umgebung wiederherzustellen. Zu den Vorsichtsma?nahmen geh?ren nicht das Senden von Git, reaktivieren Sie jedes Mal, wenn das neue Terminal ge?ffnet wird, und die automatische Identifizierung und Umschaltung kann von IDE verwendet werden.

See all articles