这里只是简单介绍缓存:
官网: https://flask-caching.readthedocs.io/en/latest/
一个写的很不错的: https://www.cnblogs.com/cwp-bg/p/9687005.html
何时使用话缓存:
1. 存储需要短暂存储的数据, 可以以键值对形式存储
2.存储视图, 对于不需要不停刷新的页面可以设置一定的缓存时间,这样在时间内不需要频繁的访问数据库。
存储方式:
由CACHE_TYPE 来设置:
官网: https://pythonhosted.org/Flask-Caching/#simplecache 有详细解释
使用示例:
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
1. 注册 Cache
from flask import Flask from flask_caching import Cache from flask_cors import CORS from flask_jwt_extended import JWTManager from flask_marshmallow import Marshmallow from flask_sqlalchemy import SQLAlchemy import config db = SQLAlchemy() ma = Marshmallow() jwt = JWTManager() cache = Cache() def create_app(): app = Flask(__name__) app.config.from_object(config) db.init_app(app) global ma ma = Marshmallow(app) # 解决跨域请问题 CORS(app, resources=r'/*') # 缓存绑定 cache.init_app(app) # 绑定路由 from .routes import register register(app) return app
2. 视图使用
from manageApp.utils import ReturnValue from manageApp import cache
# manageApp 是我的app
@cache.cached(timeout=30) # 专属试图, 设置缓存时间30 s def get_one(id): print("请求一次") # 自己定义的返回类,规范返回值 return ReturnValue.return_value("success", {"name": "刘勇"})
请求效果:
第一次进入了 试图后后面30s都是使用缓存数据,不用进行数据处理, 30s后再次刷新。
注: 后30s的数据都是和第一次的一样
存储键值对数据:
def get_one(id): cache.set("name", "liuyong") # return jsonify({"name": "刘勇"}) return ReturnValue.return_value("success", {"name": "刘勇"}) def get_list(): name = cache.get("name") print("this name is %s" % name) return ReturnValue.return_value("success", {"name": name})
返回结果
我的缓存时间设置的是 5 分钟, 配置在config 文件中:
更多方法:
add
(*args, **kwargs)
cached
(timeout=None, key_prefix=’view/%s’, unless=None, forced_update=None, query_string=False)
clear
()
delete
(*args, **kwargs)
delete_many
(*args, **kwargs)
delete_memoized
(f, *args, **kwargs)
get
(*args, **kwargs)
get_many
(*args, **kwargs)-
Proxy function for internal cache object.
init_app
(app, config=None)-
memoize
(timeout=None, make_name=None, unless=None, forced_update=None)
set
(*args, **kwargs)-
Proxy function for internal cache object.
set_many
(*args, **kwargs)-
Proxy function for internal cache object.
https://pythonhosted.org/Flask-Caching/#simplecache