You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FastAPI应用中使用FastAPI-Cache2包实现Redis缓存

如何在FastAPI应用中使用FastAPI-Cache2包实现Redis缓存

哇,你已经把核心代码都写得差不多啦!我来帮你把这段用FastAPI-Cache2搭配Redis实现缓存的逻辑理清楚,确保你能在FastAPI应用里顺畅跑起来~

1. 先看缓存初始化的核心函数

这个异步函数负责连接Redis实例,完成FastAPI-Cache的后端配置:

  • 用aioredis.from_url创建Redis连接,这里从你的配置类appConfig里拿Redis地址,同时设置了编码规则和响应解码方式
  • 通过FastAPICache.init把Redis后端注册为缓存载体,还指定了缓存键的前缀igw-cache,这样能避免和其他业务的缓存键冲突
  • 额外加了日志记录,不管初始化成功还是失败,都能快速在日志里查到状态
async def init_cache():
    try:
        redis = aioredis.from_url(  # type: ignore
            appConfig.REDIS_ENDPOINT,
            encoding='utf-8',
            decode_responses=False,
        )
        FastAPICache.init(RedisBackend(redis), prefix='igw-cache')
        logging.info('Cache initialized successfully.')
    except Exception as e:
        logging.error(f'Error initializing cache: {e}')

2. 用Lifespan管理缓存的生命周期

FastAPI的lifespan上下文管理器专门用来处理应用启动和关闭时的操作,这里我们用它让缓存初始化逻辑自动绑定到应用生命周期:

  • 用@asynccontextmanager标记这是异步上下文管理器
  • 在应用启动时(yield之前)调用init_cache完成缓存初始化
  • 如果之后需要在应用关闭时做清理(比如主动关闭Redis连接),可以在yield后面加对应的逻辑
@asynccontextmanager
async def lifespan(_app: FastAPI) -> AsyncIterator[None]:
    await init_cache()
    yield
    # 可选:在这里添加Redis连接关闭、缓存清理等应用退出时的操作

3. 把生命周期绑定到FastAPI应用

最后一步就是把这个lifespan绑定到你的FastAPI实例上,这样应用启动时就会自动触发缓存初始化了:

app = FastAPI(lifespan=lifespan, docs_url=docs_url)

对了,补充个小提示:等你把基础配置搞定后,要给具体接口加缓存的话,直接用FastAPI-Cache2提供的@cache装饰器就行,比如给某个接口设置60秒的缓存有效期:

from fastapi_cache.decorator import cache

@router.get("/your-api-endpoint")
@cache(expire=60)  # 缓存结果60秒
async def your_api_function():
    # 这里写你的业务逻辑
    return {"result": "your-data"}

备注:内容来源于stack exchange,提问作者Abbasihsn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:35:29