FastAPI 性能扩展 Redis 缓存、Celery 异步任务与容器部署
任务详情接口被频繁刷新时数据库其实在重复回答同一个问题。把所有耗时工作都塞进 FastAPI 请求里也会出事用户点一次导出浏览器就一直转圈。这一篇给任务 API 加两条分流Redis 负责短暂记忆Celery 负责把耗时工作交给 worker。配套代码已经放在 fastapi-task-api文章中的完整实现以main分支为准。Redis 不是越早接越好缓存会带来失效问题所以项目只缓存一个最容易定义边界的对象任务详情。列表带分页和筛选条件缓存键会迅速膨胀先不碰它。defcache_key(owner_id:uuid.UUID,task_id:uuid.UUID)-str:returnftask:{owner_id}:{task_id}router.get(/{task_id},response_modelTaskRead)asyncdefread_task(task_id:uuid.UUID,sessionDepends(get_db_session),redisDepends(get_redis)):keycache_key(current_user.id,task_id)cachedawaitredis.get(key)ifcached:returnTaskRead.model_validate_json(cached)taskawaitowned_task(session,task_id,current_user.id)resultTaskRead.model_validate(task)awaitredis.set(key,result.model_dump_json(),ex300)# 缓存五分钟returnresult键里必须有用户 ID。即使任务 UUID 已经很难猜隔离条件也不能依赖运气。更新和删除任务后立刻删键下一次读取自动回源数据库。创建接口没有对应缓存因此不需要做任何操作。awaitsession.commit()awaitredis.delete(cache_key(current_user.id,task_id))缓存的正确性来自失效策略不来自缓存命中率。这就是为什么这里只放详情不拿 Redis 去替代数据库。BackgroundTasks 和 Celery 各干什么FastAPI 的BackgroundTasks适合短小、允许跟 Web 进程同生共死的事情例如记录一条审计日志。它不需要单独部署 worker。Celery 则把任务投给 broker由独立 worker 消费。导出 CSV、批量发邮件、调用慢速第三方接口都更适合这个路径。worker 可独立扩容也能配置重试。任务 API 用 Redis 同时充当 broker 和结果后端。场景选择写一条轻量审计日志BackgroundTasks导出任务 CSVCelery批量处理、失败重试Celery需要立即返回计算结果普通async接口把导出变成异步工作提交导出时接口立即返回202和task_id。客户端再用这个 ID 查询状态。为了避免任何登录用户猜到 ID 后读取结果项目把任务所有者短暂记录在 Redis 里。router.post(/exports/tasks,status_code202)asyncdefqueue_export(redisDepends(get_redis),current_userDepends(get_current_user)):resultexport_user_tasks.delay(str(current_user.id))awaitredis.set(fexport-owner:{result.id},str(current_user.id),ex3600)return{task_id:result.id,status:PENDING}worker 内部重新开数据库会话读取该用户的任务再生成 UTF-8 CSV 字符串。不要把 HTTP 请求里的 SQLAlchemy session 传给 Celery它无法跨进程序列化。celery_app.task(bindTrue,autoretry_for(Exception,),retry_backoffTrue,max_retries3)defexport_user_tasks(self,user_id:str)-str:returnasyncio.run(build_csv(uuid.UUID(user_id)))autoretry_for只适合可重试的临时失败例如数据库短暂不可用。CSV 格式错误或无效用户这类确定性错误重试三次也不会变好。大文件也不该塞进结果后端真实项目应该上传对象存储结果只返回下载地址。Celery WorkerRedisFastAPIClientCelery WorkerRedisFastAPIClientPOST 导出投递任务和保存所有者202 task_idworker 消费任务写入结果状态GET 导出状态PENDING 或 SUCCESS用 Docker Compose 把四个服务放到一起本地起 API 还不难真正容易遗漏的是 worker、PostgreSQL 和 Redis 的连接配置。docker-compose.yml定义四个服务PostgreSQL 和 Redis 有健康检查API 等数据库健康后先执行alembic upgrade head再启动。Copy-Item.env.example.env docker compose up--build.env中的DATABASE_URL主机名是postgresREDIS_URL主机名是redis它们来自 Compose 服务名。启动成功后打开/docs先注册、登录复制 Bearer 令牌再创建任务和提交导出。这一套配置不是高可用方案。生产环境还要接日志、指标、备份、密钥管理和外部对象存储。但 API、数据库、缓存和 worker 已经各自有了明确位置后续扩展不会全挤在 Web 进程里。本篇收口Redis 只缓存任务详情更新和删除时精确失效Celery 处理可延迟的 CSV 导出并返回可查询的任务 ID导出任务的所有者映射阻止其他用户读取结果Docker Compose 统一启动 API、PostgreSQL、Redis 与 worker

相关新闻

手把手教你用Ollama本地部署Qwen3.5-9B大模型:从GGUF量化到WebUI实战

手把手教你用Ollama本地部署Qwen3.5-9B大模型:从GGUF量化到WebUI实战

最近在本地部署大模型时,发现了一个“宝藏”模型——Qwen3.5-9B。它不仅在推理、代码、数学等多项基准测试中表现出色,更关键的是,通过特定的量化格式(如GGUF)和工具(如Ollama)部署后&#xff0…

2026/8/9 2:18:45 阅读更多 →
终极Windows驱动管理神器:DriverStore Explorer完整指南,轻松释放数GB磁盘空间

终极Windows驱动管理神器:DriverStore Explorer完整指南,轻松释放数GB磁盘空间

终极Windows驱动管理神器:DriverStore Explorer完整指南,轻松释放数GB磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间日益…

2026/8/9 2:17:45 阅读更多 →
如何用OpenCascade.js在浏览器中实现专业级3D CAD建模:完整指南

如何用OpenCascade.js在浏览器中实现专业级3D CAD建模:完整指南

如何用OpenCascade.js在浏览器中实现专业级3D CAD建模:完整指南 【免费下载链接】opencascade.js Port of the OpenCascade CAD library to JavaScript and WebAssembly via Emscripten. 项目地址: https://gitcode.com/gh_mirrors/op/opencascade.js 想要在…

2026/8/9 2:17:45 阅读更多 →

最新新闻

解决Firefox配置文件版本不兼容的6种方法

解决Firefox配置文件版本不兼容的6种方法

1. 问题现象与背景解析 当你在Windows或macOS系统上启动Firefox浏览器时,突然弹出一个红色警告框,显示"This profile was last used with a newer version of this application. Please create a new profile or use a different version of this a…

2026/8/9 8:03:42 阅读更多 →
2026年SCI投稿降AI完整教程:免费3步把论文AI率从65%压到12%,iThenticate亲测过检

2026年SCI投稿降AI完整教程:免费3步把论文AI率从65%压到12%,iThenticate亲测过检

2026年SCI投稿降AI完整教程:免费3步把论文AI率从65%压到12%,iThenticate亲测过检 投了一篇SCI论文,iThenticate查出来AI率65%,编辑直接发邮件要求修改。我当时真的不知道从哪下手,网上找的方法要么太笼统,…

2026/8/9 8:03:42 阅读更多 →
【无标题】CSP历年真题题解思考过程 ——6

【无标题】CSP历年真题题解思考过程 ——6

CSP历年真题题解&思考过程 —— 6P7912 [CSP-J 2021] 小熊的果篮70分模拟解法AC解法P8815 [CSP-J 2022] 逻辑表达式AC解法P7912 [CSP-J 2021] 小熊的果篮 题干链接 70分模拟解法 我们只需要从左往右遍历所有水果模拟就行了。遇到一个水果,如果他和上个水果颜…

2026/8/9 8:03:42 阅读更多 →
C#方法编程指南:从基础到高级应用

C#方法编程指南:从基础到高级应用

1. C#方法基础概念解析 在C#编程中,方法(Method)是构成程序逻辑的基本单元,它封装了一系列执行特定功能的代码块。简单来说,方法就是告诉计算机"如何做"的指令集合。每个C#程序至少包含一个Main方法&#xf…

2026/8/9 8:03:42 阅读更多 →
2026金昌危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

2026金昌危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

金昌的危房鉴定市场近年热度攀升,老旧小区业主、乡镇自建房住户、商铺经营者、园区厂房以及学校医院纷纷寻求房屋安全评估。市面上机构鳞次栉比,却鱼龙混杂,不少无资质单位出具的鉴定报告根本无法通过住建审核,白白耗费业主时间与…

2026/8/9 8:03:42 阅读更多 →
2026锦州危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

2026锦州危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

锦州老旧房屋鳞次栉比,危房鉴定机构鱼龙混杂,不少老旧小区业主、乡镇自建房住户、商铺经营者乃至园区厂房、学校医院都亟需一份权威可靠的危房安全评估报告。市面上部分无资质机构出具的检测报告往往无法通过住建部门审核,让人白费功夫。小编…

2026/8/9 8:02:42 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →