使用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中break语句的用法
May 14 Python
python创建进程fork用法
Jun 04 Python
Djang中静态文件配置方法
Jul 30 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
解决Django加载静态资源失败的问题
Jul 28 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
pycharm 2020 1.1的安装流程
Sep 29 Python
详解pandas赋值失败问题解决
Nov 29 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 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语法(4)
2006/10/09 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
PHP实现文件下载详解
2014/11/27 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
解决option标签selected="selected"属性失效的问题
2017/11/06 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
python的faker库用法
2019/11/28 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
个人自我鉴定怎么写
2013/10/28 职场文书
学习委员自我鉴定
2014/01/13 职场文书
教师简历自我评价
2014/02/03 职场文书
目标管理责任书
2014/04/15 职场文书
工地安全标语
2014/06/07 职场文书
实习协议书范本
2014/09/25 职场文书
三十年同学聚会感言
2015/07/30 职场文书
消防安全培训工作总结
2015/10/23 职场文书