使用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 24 Python
python发送邮件接收邮件示例分享
Jan 21 Python
python内存管理分析
Apr 08 Python
详解在Python程序中使用Cookie的教程
Apr 30 Python
python 实时遍历日志文件
Apr 12 Python
python批量读取txt文件为DataFrame的方法
Apr 03 Python
在python中bool函数的取值方法
Nov 01 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
python selenium 弹出框处理的实现
Feb 26 Python
Python常用模块os.path之文件及路径操作方法
Dec 03 Python
如何解决.cuda()加载用时很长的问题
May 24 Python
Python软件包安装的三种常见方法
Jul 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
PHP的变量类型和作用域详解
2014/03/12 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
jqgrid 表格数据导出实例
2013/11/21 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
详解K-means算法在Python中的实现
2017/12/05 Python
《Python学习手册》学习总结
2018/01/17 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
python 实现两个npy档案合并
2020/07/01 Python
python绘图模块之利用turtle画图
2021/02/12 Python
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
测绘工程个人的自我评价
2013/11/23 职场文书
个人主要事迹材料
2014/08/26 职场文书
圆明园观后感
2015/06/03 职场文书
初三化学教学反思
2016/02/22 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技