使用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发送和接收邮件
Sep 27 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
Python实现matplotlib显示中文的方法详解
Feb 06 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
Nov 14 Python
Python基础知识点 初识Python.md
May 14 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
Pycharm快捷键配置详细整理
Oct 13 Python
Python OpenCV快速入门教程
Apr 17 Python
使用python求解迷宫问题的三种实现方法
Mar 17 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 版本]
2007/03/20 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
python实现哈希表
2014/02/07 Python
python uuid模块使用实例
2015/04/08 Python
Python 中pandas.read_excel详细介绍
2017/06/23 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
PyQt实现计数器的方法示例
2021/01/18 Python
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
门卫岗位职责
2013/11/15 职场文书
乡下人家教学反思
2014/02/01 职场文书
同学会主持词
2014/03/18 职场文书
满月酒主持词
2014/03/27 职场文书
宣传工作经验材料
2014/06/02 职场文书
软件测试专业推荐信
2014/09/18 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
实习报告怎么写
2019/06/20 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python