使用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发布模块的步骤分享
Feb 21 Python
Python实现选择排序
Jun 04 Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 Python
pd.DataFrame统计各列数值多少的实例
Dec 05 Python
如何基于python实现归一化处理
Jan 20 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
Django实现内容缓存实例方法
Jun 30 Python
Python - 10行代码集2000张美女图
May 23 Python
python 爬取天气网卫星图片
Jun 07 Python
一篇文章弄懂Python中的内建函数
Aug 07 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
JS 常用校验函数
2009/03/26 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python设计模式之单例模式实例
2014/04/26 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
Python 如何查找特定类型文件
2020/08/17 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
J2EE面试题集锦(附答案)
2013/08/16 面试题
医科大学生的自我评价
2013/12/04 职场文书
作弊检讨书1000字
2014/02/01 职场文书
家具促销活动方案
2014/02/16 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
好的促销活动方案
2014/08/21 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
银行求职信模板
2015/03/20 职场文书
旷工检讨书大全
2015/08/15 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL