使用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进阶学习之特殊方法实例详析
Dec 01 Python
python2.7和NLTK安装详细教程
Sep 19 Python
对python修改xml文件的节点值方法详解
Dec 24 Python
Python中的元组介绍
Jan 28 Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 Python
python使用matplotlib绘制雷达图
Oct 18 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
python-xpath获取html文档的部分内容
Mar 06 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
python3 re返回形式总结
Nov 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
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
php实现每日签到功能
2018/11/29 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
Js四则运算函数代码
2012/07/21 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
2015/08/04 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
django之常用命令详解
2016/06/30 Python
关于反爬虫的一些简单总结
2017/12/13 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
python反转列表的三种方式解析
2019/11/08 Python
python相对企业语言优势在哪
2020/06/12 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
毕业论文评语大全
2014/04/29 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
端午节寄语2015
2015/03/23 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python