flask cache
当一个资源需要从服务器中获取,并且资源比较庞大,服务器可能处理起来比较慢,并且此功能为热门功能,可能用户需要经常访问获取。此时,服务器就可以考虑缓存技术。缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。接下来将记录一下如何缓存一个Flask的请求,并且记录一下Flask的缓存扩展库Flask-Cache:
安装
pip install flask-cache
1
初始化
当我们安装好了Flask-Cache模块时,我们还需要对其进行实例化,并进行相应的配置:
from flask import Flask
from flask_cache import Cache
app = Flask(__name__)
cache = Cache(app,config={
"CACHE_TYPE":"simple"
})
1
2
3
4
5
6
7
也可以使用init_app()方法稍后设置你的实例:
app = Flask(__name__)
cache = Cache(config={
"CACHE_TYPE":"simple"
})
cache.init_app(app)
1
2
3
4
5
或者也可以这样:
app = Flask(__name__)
cache = Cache()
cache.init_app(app,config={
"CACHE_TYPE":"simple"
})
1
2
3
4
5
缓存视图函数
要缓存视图函数,你可以使用@cache.cached()装饰器,这个装饰器默认使用request.path作为cache_key:
@app.route("/get_info")
@cache.cached()
def get_info():
print "no cache"
return "it is ok!"
1
2
3
4
5
@cache.cached()装饰器还可以接收参数,如参数timeout设置缓存过期时间;参数unless接收一个Bool类型的值,如果设置为True将不会使用缓存机制;参数key_prefix替换默认的cache_key
缓存其他函数
使用@cache.cached()装饰器可以缓存其它非视图相关函数的结果,当使用@cache.cached()装饰器缓存非视图相关函数的结果时,建议传入参数key_prefix来替换默认的cache_key,否则它将会默认使用request.path作为cache_key:
@cache.cached(timeout=30,key_prefix="aaa")
def sum_data(a,b):
return int(a) + int(b)
1
2
3
memoize()
在@cache.memoize()装饰器中,函数的参数也包含在cache_key中:
@cache.memoize(timeout=30)
def sum_data(a,b):
return int(a) + int(b)
1
2
3
值得注意的是,对于不接收参数的函数来说,@cache.memoize()与@cache.cached()是一样的
清除缓存
以下是一个用于清除应用程序缓存的示例脚本:
from manager import app,cache
with app.app_context():
cache.clear()
---------------------
作者:喷跑的豆子
来源:CSDN
原文:https://blog.csdn.net/y472360651/article/details/79847933
版权声明:本文为博主原创文章,转载请附上博文链接!
然后常见bug:
flask-cache报错No module named 'flask.ext;解决方案
- 找到flask-cache包中的jinja2ext.py,将
from flask.ext.cache import make_template_fragment_key改为from flask_cache import make_template_fragment_key
浙公网安备 33010602011771号