使用 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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM