使用 Flask-Cache 缓存给Flask提速
Django里面可以很方便的应用缓存,那Flask里面没准备这么周全怎么办?自己造轮子么?不用的,前人种树后人乘凉,我们有Flask-Cache,用起来和Django里面一样方便哦!
1.安装
pip install Flask-Cache
1
2.配置
以我的zhihu项目(源码)为例:
在config.py里面,设置simple缓存类型,也可以用第三方的redis之类的,和Django一样,装好redis改下设置就行
class Config:
#省略
CACHE_TYPE = 'simple'
1
2
3
在app/init.py里面
from flask_cache import Cache
#缓存
cache = Cache()
def create_app(config_name):
app = Flask(__name__)
#此处省略若干字
cache.init_app(app)
#工厂函数返回创建的程序示例
return app
1
2
3
4
5
6
7
8
9
10
11
12
13
3.应用
在views.py里面
from .. import db, cache
from . import main
from ..decorators import admin_required, permission_required
@main.route('/', methods=['GET','POST'])
@cache.cached(timeout=300,key_prefix='index')#设置一个key_prefix来作为标记,然后,在内容更新的函数里面调用cache.delete('index')来删除缓存来保证用户访问到的内容是最新的
def index():
print("命令行里显示我就是调用这个函数了没走缓存,不显示我就是直接走缓存没吊用函数")
# 省略
return render_template('index4.html', form=form, posts=posts,show_followed=show_followed, pagination=pagination)
1
2
3
4
5
6
7
8
9
10
11
执行一遍,看看有没有print输出,就可以看到缓存是否生效
4.清除缓存
第一种方法就是设置过期时间自动清除,可以在 Flask 的config里面加上配置项:
CACHE_DEFAULT_TIMEOUT 或者装饰器加参数timeout=50。
第二种方法就是主动删除,比如@cache.cached(timeout=300,key_prefix=’index’)设置好了缓存,删除的时候用cache.delete(‘index’)即可
@main.route('/askquestion', methods=['GET','POST'])
@login_required
def askquestion():
#提问题写入数据库操作省略
cache.delete('index')#删除缓存
return render_template('askquestion.html', form=form, posts=posts,show_followed=show_followed, pagination=pagination)
1
2
3
4
5
6
7
就像上面如果没设置key的话,默认的key_prefix=’view/%s’,这个%s就是请求的路径request.path,所以如果用@cache.cached(timeout=300)建立缓存就可以用
cache.delete(‘view//’)来清除缓存了,请求路径有的函数没有,最好设置key来搞
还有一种清除所有缓存的cache.clear()
---------------------
作者:Peace & Love
来源:CSDN
原文:https://blog.csdn.net/u013205877/article/details/78013289
版权声明:本文为博主原创文章,转载请附上博文链接!
posted on 2018-12-22 19:24 ExplorerMan 阅读(1499) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2017-12-22 MySQL数据库基准压力测试工具之MySQLSlap使用实例