使用Flask-Cache缓存实现给Flask提速的方法详解


Posted in Python onJune 11, 2019

本文实例讲述了使用Flask-Cache缓存实现给Flask提速的方法。分享给大家供大家参考,具体如下:

Django里面可以很方便的应用缓存,那Flask里面没准备这么周全怎么办?自己造轮子么?不用的,前人种树后人乘凉,我们有Flask-Cache,用起来和Django里面一样方便哦!

1.安装

pip install Flask-Cache

2.配置

以我的zhihu项目(源码)为例:

config.py里面,设置simple缓存类型,也可以用第三方的redis之类的,和Django一样,装好redis改下设置就行

class Config:
  #省略
  CACHE_TYPE = 'simple'

app/init.py里面

from flask_cache import Cache
#缓存
cache = Cache()
def create_app(config_name):
  app = Flask(__name__)
  #此处省略若干字
  cache.init_app(app)
  #工厂函数返回创建的程序示例
  return app

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)

执行一遍,看看有没有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)

就像上面如果没设置key的话,默认的key_prefix='view/%s',这个%s就是请求的路径request.path,所以如果用@cache.cached(timeout=300)建立缓存就可以用cache.delete('view//')来清除缓存了,请求路径有的函数没有,最好设置key来搞

还有一种清除所有缓存的cache.clear()

希望本文所述对大家基于Flask框架的Python程序设计有所帮助。

Python 相关文章推荐
python pickle 和 shelve模块的用法
Sep 16 Python
Python爬取Coursera课程资源的详细过程
Nov 04 Python
在Python的Django框架中simple-todo工具的简单使用
May 30 Python
Python字符串、元组、列表、字典互相转换的方法
Jan 23 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
python实现按行分割文件
Jul 22 Python
Python sorted排序方法如何实现
Mar 31 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 Python
python通配符之glob模块的使用详解
Apr 24 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 Python
一篇文章带你搞懂Python类的相关知识
May 20 Python
使用Python实现将list中的每一项的首字母大写
Jun 11 #Python
Python中@property的理解和使用示例
Jun 11 #Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
Jun 11 #Python
详解Python3之数据指纹MD5校验与对比
Jun 11 #Python
Python自动抢红包教程详解
Jun 11 #Python
python解压TAR文件至指定文件夹的实例
Jun 10 #Python
python pyinstaller 加载ui路径方法
Jun 10 #Python
You might like
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
angularJS开发注意事项
2018/05/26 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
Python功能键的读取方法
2015/05/28 Python
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
主办会计岗位职责
2014/03/13 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
初中学校军训方案
2014/05/09 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
教师演讲稿开场白
2014/08/25 职场文书
护士节慰问信
2015/02/15 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle