zoukankan      html  css  js  c++  java
  • 使用 Flask-Cache 缓存给Flask提速

    Django里面可以很方便的应用缓存,那Flask里面没准备这么周全怎么办?自己造轮子么?不用的,前人种树后人乘凉,我们有Flask-Cache,用起来和Django里面一样方便哦!

    1.安装
    pip install Flask-Cache
    1
    2.配置
    以我的zhihu项目(源码)为例:
    在config.py里面,设置simple缓存类型,也可以用第三方的redis之类的,和Django一样,装好redis改下设置就行

    class Config:
    #省略
    CACHE_TYPE = 'simple'
    1
    2
    3
    在app/init.py里面

    from flask_cache import Cache

    #缓存
    cache = Cache()

    def create_app(config_name):
    app = Flask(__name__)

    #此处省略若干字
    cache.init_app(app)

    #工厂函数返回创建的程序示例
    return app
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    执行一遍,看看有没有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)
    1
    2
    3
    4
    5
    6
    7
    就像上面如果没设置key的话,默认的key_prefix=’view/%s’,这个%s就是请求的路径request.path,所以如果用@cache.cached(timeout=300)建立缓存就可以用
    cache.delete(‘view//’)来清除缓存了,请求路径有的函数没有,最好设置key来搞
    还有一种清除所有缓存的cache.clear()
    ---------------------
    作者:Peace & Love
    来源:CSDN
    原文:https://blog.csdn.net/u013205877/article/details/78013289
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    二进制运算基础
    初识Tomcat系统架构
    MySQL InnoDB引擎锁的总结
    Java并发编程:并发容器之CopyOnWriteArrayList
    java类的加载机制
    Nginx实现tomcat集群进行负载均衡
    Java序列化对象为字符串并将字符串反序列化为对象
    数据库的四大特性及事务的隔离级别
    人性的弱点
    华为工作法摘抄笔记
  • 原文地址:https://www.cnblogs.com/ExMan/p/10162170.html
Copyright © 2011-2022 走看看