FastAPI Simple Cache
Project description
FastAPI Simple Cache
FastAPI Simple Cache will cache responses from a decorated endpoint if the response
is JSON encodable or
a FastAPI Response
.
Quick start
from fastapi import FastAPI, Request
app = FastAPI()
# Initialize in startup event
from fastapi_simple_cache import FastAPISimpleCache
from fastapi_simple_cache.backends.inmemory import InMemoryBackend
@app.on_event("startup")
async def startup():
backend = InMemoryBackend()
FastAPISimpleCache.init(backend=backend)
# Use the @cache decorator
from fastapi_simple_cache.decorator import cache
@app.get("/")
@cache(expire=3600) # Set expiration in seconds
def root(request: Request): # Add a Request typed parameter
return {"datetime": datetime.utcnow()}
Check here for FastAPI application examples with different backends and features.
Installation
The installation depends on the backend.
- In memory:
pip install fastapi-simple-cache
- Redis:
pip install "fastapi-simple-cache[redis]"
- Firestore:
pip install "fastapi-simple-cache[firestore]"
Backends
In memory
The InMemoryBackend
class implements an in-memory backend.
from fastapi_simple_cache.backends.inmemory import InMemoryBackend
@app.on_event("startup")
async def startup():
backend = InMemoryBackend()
FastAPISimpleCache.init(backend=backend)
Redis
The RedisBackend
class implements a Redis backend.
from redis.asyncio import ConnectionPool, client
from fastapi_simple_cache.backends.redis import RedisBackend
@app.on_event("startup")
async def startup():
pool = ConnectionPool.from_url(url="redis://localhost:6379")
backend = RedisBackend(redis=client.Redis(connection_pool=pool))
FastAPISimpleCache.init(backend=backend)
Firestore
The FirestoreBackend
class implements a Google Firestore backend.
import firebase_admin
from firebase_admin import firestore, credentials
from fastapi_simple_cache.backends.firestore import FirestoreBackend
@app.on_event("startup")
async def startup():
cred = credentials.ApplicationDefault()
firebase_admin.initialize_app(cred, {"projectId": "gcp_project"})
db = firestore.client()
collection = db.collection("cache_collection")
backend = FirestoreBackend(collection=collection)
FastAPISimpleCache.init(backend=backend)
Features
Namespaces
You can add the parameter namespace
on cache initialization to modify
the storage keys. Use this feature if you need to share same cache
environment with other applications but with different keys.
@app.on_event("startup")
async def startup():
backend = InMemoryBackend()
FastAPISimpleCache.init(
backend=backend,
namespace="my-app"
)
Multi backends
Use more than one backend to cache responses with the backend
parameter
on cache initialization. This feature is useful if you want to check an
in-memory cache before an external cache.
from fastapi_simple_cache.backends.inmemory import InMemoryBackend
from fastapi_simple_cache.backends.redis import RedisBackend
@app.on_event("startup")
async def startup():
inmem_backend = InMemoryBackend()
redis_backend = RedisBackend(...)
FastAPISimpleCache.init(
backend=[inmem_backend, redis_backend]
)
Valid status codes
Set valid status codes to cache responses in the @cache
parameter
status_codes
(defaults to [200]
).
@app.get("/")
@cache(expire=3600, status_codes=[200, 201])
def root(request: Request):
return {"datetime": datetime.utcnow()}
No cache
Avoid storing a request/response by adding the header
cache-control: no-cache
to the request. This works both for the client
and the server.
License
FastAPI Fire Cache is released under the GNU General Public License v3.0 or later, see here for a description of this license, or see the LICENSE file for the full text.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file fastapi-simple-cache-0.1.5.tar.gz
.
File metadata
- Download URL: fastapi-simple-cache-0.1.5.tar.gz
- Upload date:
- Size: 23.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.28.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2b46a1cdf73192d42dd1646e9045ac226e3f13764e17b2417782b27194cb8dfc |
|
MD5 | de6dedf453bf58b993f729725d7f8042 |
|
BLAKE2b-256 | adc1adb5bc899cf3f3f62b6c85640a64c9531e2133a092b5140553f357cedf2b |
File details
Details for the file fastapi_simple_cache-0.1.5-py3-none-any.whl
.
File metadata
- Download URL: fastapi_simple_cache-0.1.5-py3-none-any.whl
- Upload date:
- Size: 20.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.28.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f64f54b1b16c69d3400625fc3e103da29c0b78324c760cdb86a59ae8f74b4b1c |
|
MD5 | 5bdfecdb50f0af3f004e91964c18682b |
|
BLAKE2b-256 | a9a67e370f19aba67065018068d7800751b9a62c2e996e0cd54c80d5c53b1f74 |