Flask-Caching深度详解
1. 他是什么Flask-Caching 是 Flask 框架的一个扩展包。你可以把它理解为给 Flask 应用配备的一个“快速存取仓库”。Flask 本身没有自带缓存功能。当应用收到请求时即使请求的是完全相同的数据每次都得把数据库翻一遍或者把复杂的计算重来一遍。Flask-Caching 就是专门填补这个空白的它提供了一个统一的接口让你能轻松地把耗时操作的结果暂存起来下次再用时直接取货不用重新生产。2. 他能做什么举个例子你做了一个新闻网站首页的新闻列表每 5 分钟才更新一次但用户可能是每秒都在刷。如果没有缓存每刷一次数据库就得忙一次有了 Flask-Caching第一个用户访问时页面是“现做”的之后的用户看到的直接是“热好”的版本2 秒的加载时间可能瞬间降到 0.1 秒。具体能做的事情分四层缓存整个页面或接口比如某个新闻详情页缓存 10 分钟10 分钟内不管谁来访问都不需要查数据库。缓存函数的计算结果比如一个根据标签生成相关文章列表的函数只要传入的参数相同就直接返回上次算好的结果。缓存模板里的局部片段比如页脚的公司联系方式、侧边栏的排行榜这些部分通常变化极慢没必要每次渲染都重新生成。手动精细控制比如把用户权限数据存进去下次判断权限时直接读取。3. 怎么使用从简单到复杂通常是这几种用法。第一步安装和初始化就像给仓库配个管理员。初始化时指定把东西存在哪儿是存内存里速度快、还是存 Redis分布式或文件系统。pythonfrom flask import Flask from flask_caching import Cache app Flask(__name__) # 配置把数据存在内存中默认超时5分钟 app.config[CACHE_TYPE] SimpleCache app.config[CACHE_DEFAULT_TIMEOUT] 300 cache Cache(app)第二步缓存视图最常见的用法在路由上加装饰器告诉 Flask“这个页面的结果存 50 秒。”pythonapp.route(/news) cache.cached(timeout50) def news(): # 模拟耗时2秒的数据库查询 return expensive_query()第一个请求 2 秒之后 50 秒内的请求都是毫秒级响应。第三步缓存函数的返回值有些函数不是视图但经常被调用。比如获取系统配置pythoncache.cached(timeout600, key_prefixsite_config) def get_config(): return load_config_from_db()注意这里的key_prefix是必须的因为非视图函数不知道用哪个 URL 当钥匙。第四步记忆化Memoize—— 带参数的缓存这是比较实用的功能。它会把函数每次传入的参数也作为缓存钥匙的一部分。比如根据用户 ID 查角色pythonclass User: cache.memoize(timeout60) def has_permission(self, resource): # 复杂的权限判断逻辑 return check_db(self.id, resource)同一个用户查“编辑权限”60 秒内只需要算一次。第五步手动存/取更灵活的场景比如某个耗时的 API 数据pythonapp.route(/stats) def stats(): data cache.get(user_stats) if data is None: data compute_heavy_stats() cache.set(user_stats, data, timeout120) return data4. 最佳实践根据实际项目经验有几个原则比较通用开发用 SimpleCache生产用 Redis。SimpleCache 是存在内存里的应用重启就丢了多进程也无法共享。生产环境用 RedisCache配置也很简单app.config[CACHE_TYPE] RedisCacheapp.config[CACHE_REDIS_URL] redis://localhost:6379/0缓存一定要设过期时间。除非是万年不变的静态数据否则必须有 timeout。不设过期时间就是埋坑数据更新了用户还在看旧内容。memoize 慎传对象。如果给cache.memoize装饰的函数传入了一个数据库模型对象Flask-Caching 会对这个对象做repr()来生成钥匙。如果对象的__repr__返回的是User at 0x10a5b2e0这种内存地址那同一个用户每次请求钥匙都不一样缓存形同虚设。建议传 user_id 这类稳定值。记得删缓存。当数据源发生变化时主动把对应的缓存清理掉。比如用户更新头像后执行cache.delete(fprofile_{user_id})。对于 memoize可以用cache.delete_memoized(user_has_permission, user_id, edit)。模板片段缓存很有用。在 Jinja2 模板里可以直接这样写把整个侧边栏区块缓存 10 分钟{% cache 600 %}... 整个侧边栏的 HTML ...{% endcache %}钥匙前缀区分环境。配置CACHE_KEY_PREFIX比如 staging_ 或 prod_避免不同环境或不同应用互相污染数据。5. 和同类技术对比对比对象一自己用 Redis / Memcached 客户端硬写有的开发者在代码里直接import redis用redis_client.get/set来实现缓存。Flask-Caching 的优势统一抽象。你不需要关心今天用的是 Redis明天换 Memcached 或者文件缓存时代码要改哪里。Flask-Caching 把这层封装好了改配置就行。另外memoize这种基于函数名和参数的自动化钥匙生成自己写很容易出错。劣势多了一层封装某些极端场景性能损耗可以忽略不计一些 Redis 的高级数据结构如 List、Set无法通过通用接口操作。对比对象二Django 的缓存框架Django 内置了非常完善的缓存体系。Flask-Caching 的特点作为第三方扩展保持了 Flask 一贯的“轻量、灵活”。你需要什么后端就装什么库没有强绑定。Django 缓存的特点Django 是“全家桶”缓存系统与 ORM、模板、中间件深度整合。比如在 settings 里配好ORM 的查询结果可以自动缓存。优点是省心缺点是笨重。结论Django 缓存更像自动驾驶Flask-Caching 像手动挡——更直接但也更清楚正在发生什么。

相关新闻

中国移动 (600941) 企业投资研究报告 2026年2月11日

中国移动 (600941) 企业投资研究报告 2026年2月11日

中国移动 (600941) 企业投资研究报告 2026年2月11日 报告日期:2026年2月11日 执行摘要 中国移动有限公司(股票代码:600941)作为全球领先的通信及信息服务企业,在2026年2月11日展现出稳健的投资价值。本报告基于最新…

2026/7/6 15:51:32 阅读更多 →
KDGGW-Y60型全自动钢管弯曲试验机

KDGGW-Y60型全自动钢管弯曲试验机

KDGGW-Y60型全自动钢管弯曲试验机一、概述1. KDGGW-Y60型全自动钢管弯曲试验机是专门用于钢管弯曲试验的检测设备,采用自主研发的伺服控制系统技术,使用电机及精密柱塞泵等阀组是通过PLC(可编程控制器)精确程序控制,弯…

2026/7/6 2:34:12 阅读更多 →
大数据场景下RabbitMQ的消息发送速率控制

大数据场景下RabbitMQ的消息发送速率控制

大数据场景下RabbitMQ的消息发送速率控制 关键词:大数据、RabbitMQ、消息发送速率控制、流控机制、性能优化 摘要:在大数据场景中,数据流量大且具有突发性,RabbitMQ作为常用的消息队列中间件,消息发送速率的合理控制至关重要。本文围绕大数据场景下RabbitMQ的消息发送速率…

2026/7/5 22:58:24 阅读更多 →

最新新闻

Fashion-MNIST实战指南:从传统MNIST到现代计算机视觉的进阶之路

Fashion-MNIST实战指南:从传统MNIST到现代计算机视觉的进阶之路

Fashion-MNIST实战指南:从传统MNIST到现代计算机视觉的进阶之路 【免费下载链接】fashion-mnist A MNIST-like fashion product database. Benchmark :point_down: 项目地址: https://gitcode.com/gh_mirrors/fa/fashion-mnist 在机器学习的演进历程中&…

2026/7/6 15:48:45 阅读更多 →
深度解析Marp插件开发:5大进阶实战技巧与架构设计指南

深度解析Marp插件开发:5大进阶实战技巧与架构设计指南

深度解析Marp插件开发:5大进阶实战技巧与架构设计指南 【免费下载链接】marp The entrance repository of Markdown presentation ecosystem 项目地址: https://gitcode.com/gh_mirrors/mar/marp Marp作为现代化的Markdown演示文稿生态系统,为开发…

2026/7/6 15:48:45 阅读更多 →
Lightpanda:9倍内存效率的革命性无头浏览器,专为AI时代打造

Lightpanda:9倍内存效率的革命性无头浏览器,专为AI时代打造

Lightpanda:9倍内存效率的革命性无头浏览器,专为AI时代打造 【免费下载链接】browser Lightpanda: the headless browser designed for AI and automation 项目地址: https://gitcode.com/GitHub_Trending/browser32/browser 在AI代理、自动化测试…

2026/7/6 15:46:42 阅读更多 →
如何在3分钟内用Open-Sora免费创作专业级AI视频:完整指南

如何在3分钟内用Open-Sora免费创作专业级AI视频:完整指南

如何在3分钟内用Open-Sora免费创作专业级AI视频:完整指南 【免费下载链接】Open-Sora Open-Sora: Democratizing Efficient Video Production for All 项目地址: https://gitcode.com/GitHub_Trending/op/Open-Sora 想象一下,只需输入几个简单的文…

2026/7/6 15:44:40 阅读更多 →
如何将闲置USB-C显示屏变身高颜值系统监控中心?

如何将闲置USB-C显示屏变身高颜值系统监控中心?

如何将闲置USB-C显示屏变身高颜值系统监控中心? 【免费下载链接】turing-smart-screen-python Unofficial Python system monitor and library for small IPS USB-C displays like Turing Smart Screen / TURZX 项目地址: https://gitcode.com/GitHub_Trending/tu…

2026/7/6 15:44:40 阅读更多 →
SVG Gobbler:矢量资源管理的终极解决方案,彻底改变你的设计工作流

SVG Gobbler:矢量资源管理的终极解决方案,彻底改变你的设计工作流

SVG Gobbler:矢量资源管理的终极解决方案,彻底改变你的设计工作流 【免费下载链接】svg-gobbler Open source browser extension for finding, editing, exporting, optimizing, and managing SVG content. 项目地址: https://gitcode.com/gh_mirrors/…

2026/7/6 15:42:36 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻