如何在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
相关产品推荐
相关产品推荐

