21 Caching Redis
DodaTech
1 min read
title: Redis Caching in FastAPI REST APIs weight: 31 date: 2026-06-28 lastmod: 2026-06-28 description: Implement Redis caching in FastAPI with aioredis, cache decorators, response caching middleware, TTL management, and cache invalidation patterns for performance optimization. tags: [api-development, fastapi]
Redis caching in FastAPI uses aioredis for async connection management, cache decorators for function-level caching, middleware for response caching, and cache invalidation patterns for data consistency.
```python
from fastapi import FastAPI, Depends
from redis import asyncio as aioredis
from functools import wraps
import json
app = FastAPI()
async def get_redis():
redis = await aioredis.from_url("redis://localhost:6379", encoding="utf-8", decode_responses=True)
try:
yield redis
finally:
await redis.close()
def cache(ttl: int = 60):
def decorator(func):
@wraps(func)
async def wrapper(*args, **kwargs):
redis = None
for arg in args:
if isinstance(arg, aioredis.Redis):
redis = arg
break
if not redis:
return await func(*args, **kwargs)
cache_key = f"{func.__name__}:{str(args)}:{str(kwargs)}"
cached = await redis.get(cache_key)
if cached:
return json.loads(cached)
result = await func(*args, **kwargs)
await redis.setex(cache_key, ttl, json.dumps(result, default=str))
return result
return wrapper
return decorator
@router.get("/products")
@cache(ttl=300)
async def list_products(redis: aioredis.Redis = Depends(get_redis)):
products = await db.query(Product).all()
return {"data": products}
What's Next
Now learn about deployment in Building REST APIs with FastAPI.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro