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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Educational Codeforces Round 10 C. Foe Pairs 水题
    Educational Codeforces Round 10 B. z-sort 构造
    CDOJ 1048 Bob's vector 三分
    Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟
    第14届电子科大初赛民间盗版部分题目题解
    HDU 5654 xiaoxin and his watermelon candy 离线树状数组 区间不同数的个数
    HDU 5653 Bomber Man wants to bomb an Array. dp
    HDU 5652 India and China Origins 二分+并查集
    HDU 5651 xiaoxin juju needs help 数学
    HDU 5650 so easy 数学
  • 原文地址:https://www.cnblogs.com/ExMan/p/10162170.html
Copyright © 2011-2022 走看看