使用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不规范的日期字符串处理类
Jun 10 Python
Python图像灰度变换及图像数组操作
Jan 27 Python
python实现剪切功能
Jan 23 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
Python多线程threading模块用法实例分析
May 22 Python
创建Django项目图文实例详解
Jun 06 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
详解Django admin高级用法
Nov 06 Python
python创建学生管理系统
Nov 22 Python
pytorch常见的Tensor类型详解
Jan 15 Python
Python+Xlwings 删除Excel的行和列
Dec 19 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
Mac下安装vue
2018/04/11 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
flask框架路由常用定义方式总结
2019/07/23 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
会计主管岗位职责
2014/01/03 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
考博导师推荐信范文
2015/03/27 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
卡特教练观后感
2015/06/08 职场文书
校园开放日新闻稿
2015/07/17 职场文书
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript