Flask框架 之Flask-caching数据页面缓存
一、配置
CACHE_TYPE: 设置缓存的类型
下面五个参数是所有的类型共有的
CACHE_NO_NULL_WARNING = "warning" # null类型时的警告消息
CACHE_ARGS = [] # 在缓存类实例化过程中解包和传递的可选列表,用来配置相关后端的额外的参数
CACHE_OPTIONS = {} # 可选字典,在缓存类实例化期间传递,也是用来配置相关后端的额外的键值对参数
CACHE_DEFAULT_TIMEOUT # 默认过期/超时时间,单位为秒
CACHE_THRESHOLD # 缓存的最大条目数
CACHE_TYPE = null # 默认的缓存类型,无缓存
CACHE_TYPE = 'simple' # 使用本地python字典进行存储,线程非安全
CACHE_TYPE = 'filesystem' # 使用文件系统来存储缓存的值
CACHE_DIR = "" # 文件目录
CACHE_TYPE = 'memcached' # 使用memcached服务器缓存
CACHE_KEY_PREFIX # 设置cache_key的前缀
CAHCE_MEMCACHED_SERVERS # 服务器地址的列表或元组
CACHE_MEMCACHED_USERNAME # 用户名
CACHE_MEMCACHED_PASSWORD # 密码
CACHE_TYPE = 'uwsgi' # 使用uwsgi服务器作为缓存
CACHE_UWSGI_NAME # 要连接的uwsgi缓存实例的名称
CACHE_TYPE = 'redis' # 使用redis作为缓存
CACHE_KEY_PREFIX # 设置cache_key的前缀
CACHE_REDIS_HOST # redis地址
CACHE_REDIS_PORT # redis端口
CACHE_REDIS_PASSWORD # redis密码
CACHE_REDIS_DB # 使用哪个数据库
# 也可以一键配置
CACHE_REDIS_URL 连接到Redis服务器的URL。示例redis://user:password@localhost:6379/2
二、常用函数
cache.cached:装饰器,装饰无参数函数,使得该函数结果可以缓存
参数:
timeout:超时时间
key_prefix:设置该函数的标志
unless:设置是否启用缓存,如果为True,不启用缓存
forced_update:设置缓存是否实时更新,如果为True,无论是否过期都将更新缓存
query_string:为True时,缓存键是先将参数排序然后哈希的结果
cache.memoize:装饰器,装饰有参数函数,使得该函数结果可以缓存
make_name:设置函数的标志,如果没有就使用装饰的函数
# 其他参数同cached
cache.delete_memoized:删除缓存
参数:
fname:缓存函数的名字或引用
*args:函数参数
cache.clear() # 清除缓存所有的缓存,这个操作需要慎重
cache.cache # 获取缓存对象
三、示例代码
from flask import Flask, render_template, redirect from flask_caching import Cache import random app = Flask(__name__) cache = Cache(app, config={"CACHE_TYPE": "simple"}) @app.route("/") @cache.cached(timeout=100) def index(): # 缓存页面 return render_template("index.html", data = random.randint(0, 10)) @app.route('/clear') def clear_cache(): # 清除所有缓存 cache.clear() return redirect("/") if __name__ == "__main__": app.debug = True app.run()
from flask import Flask, render_template, redirect from flask_caching import Cache import random import os app = Flask(__name__) cache = Cache(app, config={"CACHE_TYPE": "filesystem", "CACHE_DIR": os.path.join(os.path.dirname(__file__), "cache")}) @app.route("/") @cache.cached(timeout=100) def index(): # 缓存页面 return render_template("index.html", data = random.randint(0, 10)) @app.route('/clear') def clear_cache(): cache.clear() return redirect("/") if __name__ == "__main__": app.debug = True app.run()
from flask import Flask, render_template, redirect from flask_caching import Cache app = Flask(__name__) cache = Cache(app, config={"CACHE_TYPE": "redis", "CACHE_REDIS_HOST ": "127.0.0.1", "CACHE_REDIS_PORT": 6379}) @app.route("/") def index(): # 获取缓存数据 name = cache.get("name") return render_template("index.html", data = name or "") @app.route("/data") def set_data(): # 设置缓存数据 cache.set("name", "yy", 30) return redirect("/") @app.route('/clear') def clear_cache(): # 删除缓存 cache.delete("name") return redirect("/") if __name__ == "__main__": app.debug = True app.run()
from flask import Flask, render_template, redirect from flask_caching import Cache app = Flask(__name__) cache = Cache(app, config={"CACHE_TYPE": "redis", "CACHE_REDIS_HOST ": "127.0.0.1", "CACHE_REDIS_PORT": 6379}) @cache.memoize(timeout=60, make_name="get_result") def get_result(n): print('设置数据') return str(n) @app.route("/") def index(): result = get_result(1) return render_template("index.html", data = result) @app.route("/clear") def clear(): cache.delete_memoized(get_result, 1) return redirect("/") if __name__ == "__main__": app.debug = True app.run()