合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
有时候为了提高响应速度,可以考虑加入缓存。至少这是最简单的加速方法。缓存有什么用?加入一个请求在一段时间内多次请求结果都是一样的。 那么我们就可以考虑把这个函数的结果在缓存中存放一段时间。 Flask 本身不提供缓存,但是 Flask-Caching 扩展可以。 Flask-Caching 支持多种后端,甚至可以支持你自己开发的后端。 内置常用缓存类型 * **null**: 不缓存 (default) * **simple**: 简单缓存 * **filesystem**: 文件系统缓存 * **redis**: Redis缓存 (redis required) * **redissentinel**: RedisSentinelCache -> Redis哨兵模式缓存 (redis required) * **rediscluster**: RedisClusterCache -> Redis集群模式缓存(redis required) * **uwsgi**: UWSGI缓存 (uwsgi required) * **memcached**: Memcached缓存 (pylibmc or memcache required) * **gaememcached**: same as memcached (for backwards compatibility) * **saslmemcached**: SASLMemcachedCache (pylibmc required) * **spreadsaslmemcached**: SpreadSASLMemcachedCache (pylibmc required) 我们以 redis 缓存为例 ``` (.venv) root@airvip:~/python_app/flask-demo# pip install redis (.venv) root@airvip:~/python_app/flask-demo# pip install Flask-Caching ``` 修改配置文件 `config.py` ``` class Config(object): SECRET_KEY = "AIRVip123456airvip" # 数据库 SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3307/jdbc1" SQLALCHEMY_TRACK_MODIFICATIONS = True SQLALCHEMY_ECHO = True # cache CACHE_TYPE = "redis" CACHE_DEFAULT_TIMEOUT = 7200 CACHE_KEY_PREFIX = 'fl_' CACHE_REDIS_HOST = "127.0.0.1" CACHE_REDIS_PORT = 6379 CACHE_REDIS_DB = 1 ``` 对 `app` 目录下的 ` __init__` 初始化文件进行如下改造,添加 `cache` 模块 ``` from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_caching import Cache import logging from logging.handlers import RotatingFileHandler from config import config_map from app.utils.commons import ReCoverter # 创建数据库对象 db = SQLAlchemy() # 创建 cache 对象 cache = Cache() ##日志配置省略## # 工厂模式 def create_app(config_name): app = Flask(__name__) # 设置 flask 的配置信息 config_class = config_map[config_name] app.config.from_object(config_class) # 使用 app 初始化 db db.init_app(app) # 使用 app 初始化 cache cache.init_app(app) ##省略## return app ``` 在控制器方法中使用缓存 ``` @bp.route('/cache1') def cache1(): username = 'airvip' cache.set("username", username, timeout=30) print(cache.get('username')) return 'ok \n' @bp.route('/cache2') @cache.cached(timeout=50) def cache2(): return "你好 \n", 200, {"Content-Type": "application/text"} ``` 传送门:[缓存更多使用技巧](https://flask-caching.readthedocs.io/en/latest/)