flask_caching 缓存

这里只是简单介绍缓存:

  官网: 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=Nonekey_prefix=’view/%s’unless=Noneforced_update=Nonequery_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(appconfig=None)
  memoize(timeout=Nonemake_name=Noneunless=Noneforced_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

 

  

 

posted @ 2021-01-29 13:57  ShanCe-刘勇  阅读(407)  评论(0编辑  收藏  举报