使用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网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 Python
深入理解python对json的操作总结
Jan 05 Python
python实现随机梯度下降法
Mar 24 Python
python实现键盘控制鼠标移动
Nov 27 Python
python3使用matplotlib绘制条形图
Mar 25 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
python3 os进行嵌套操作的实例讲解
Nov 19 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
Jun 11 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 str_pad 函数使用详解
2009/01/13 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
红黑树的插入详解及Javascript实现方法示例
2018/03/26 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
Python 命令行非阻塞输入的小例子
2013/09/27 Python
Django中Model的使用方法教程
2018/03/07 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python检测数据类型的方法总结
2019/05/20 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
小学教师节活动总结
2015/03/20 职场文书
2016党员党课心得体会
2016/01/07 职场文书
接收函
2019/04/22 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL
python实现双向链表原理
2022/05/25 Python