Skip to content

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