Flask框架——flask-caching缓存
目录
安装flask-caching
缓存类型
初始化
使用缓存
缓存视图函数
其他函数
缓存对象(键值对)
上篇文章我们学习了Flask框架——Session与Cookie,这篇文章我们来学习Flask框架——flask-caching缓存。
我们访问网页时,一般都需要加载网页中的很多数据资源,例如我们访问京东或淘宝首页,如下图所示:
每次访问都需要加载上面的数据资源,假如每次都是从web服务器中加载这些数据资源,而这些数据资源比较大的话,服务器可能响应这些资源需要比较久的时间,那么我们在短时间内访问这些网页时,访问效率会很低,用户体验会很差。
为了提高web应用访问效率,减少web服务器的响应时间,我们可以在需要经常访问的网页或某个数据模块中添加缓存,在一定时间内直接在缓存中获取数据资源而不是每次都要在web服务器中获取数据资源。
安装flask-caching
Redis是一个基于内存的、高效的键值型非关系型数据库,存取效率极高,而且支持多种数据存储结构,使用起来也非常简单。所以我们使用Redis非关系型数据库作为我们缓存数据的存放位置。执行如下代码安装Redis和flask-caching:
pip install flask-caching
pip install redis
注意:除了通过pip install redis安装redis,还需要在根据运行环境在windows和服务器中安装Redis在路径中找到:redis-cli.exe文件并双击该文件启动redis服务。
缓存类型
我们来了解一下flask-caching支持的缓存类型:
flask-caching内置的缓存类型CACHE_TYPE有:NullCache、SimpleCache、FileSystemCache、RedisCache、RedisSentinelCache、RedisClusterCache、UWSGICache、MemcachedCache、SASLMemcachedCache和SpreadSASLMemcachedCache(在Flask-Caching2.0中删除)。
其中:
NullCache:无缓存,其配置参数可以有:
CACHE_NO_NULL_WARNING:不会抛出警告信息;
CACHE_DEFAULT_TIMEOUT:如果未指定超时,则使用默认超时,时间单位是秒。
SimpleCache:使用本地python字典进行存储,非线程安全,其配置参数可以有:
CACHE_DEFAULT_TIMEOUT:如果未指定超时,则使用默认超时,时间单位是秒;
CACHE_THRESHOLD:最大缓存数;
CACHE_IGNORE_ERRORS:其值为True时,在删除过程中发生的任何错误将被忽略;其值为False时,在删除过程中第一个错误时停止删除;
FileSystemCache:使用文件系统来存储缓存的值,其配置参数可以有:
CACHE_DEFAULT_TIMEOUT:如果未指定超时,则使用默认超时,时间单位是秒;
CACHE_IGNORE_ERRORS:其值为True时,在删除过程中发生的任何错误将被忽略;其值为False时,在删除过程中第一个错误时停止删除;
CACHE_DIR:存储缓存的目录;
CACHE_THRESHOLD:最大缓存数;
CACHE_OPTIONS:在缓存类实例化期间传递的可选字典。
RedisCache:使用Redis作为缓存后端,其配置参数可以有:
CACHE_DEFAULT_TIMEOUT:如果未指定超时,则使用默认超时,时间单位是秒;
CACHE_KEY_PREFIX:所有它都可以用于应用程序的应用程序使用相同的键;
CACHE_OPTIONS:在缓存类实例化期间传递的可选字典;
CACHE_REDIS_HOST:Redis 服务器主机;
CACHE_REDIS_PORT:Redis 服务器端口,默认为 6379;
CACHE_REDIS_PASSWORD:服务器的 Redis 密码;
CACHE_REDIS_DB :Redis db(从零开始的数字索引),默认为 0;
CACHE_REDIS_URL:| 连接到 Redis 服务器的 URL,例子redis://user:password@localhost:6379/2 。
RedisSentinelCache:使用Redis哨兵模型缓存,其配置参数可以有:
CACHE_KEY_PREFIX:所有它都可以用于应用程序的应用程序使用相同的键;
CACHE_REDIS_SENTINELS:Redis哨兵地址的列表或元组;
CACHE_REDIS_SENTINEL_MASTER:哨兵配置中的主服务器的名称
CACHE_REDIS_PASSWORD:服务器的 Redis 密码;
CACHE_REDIS_DB:Redis db(从零开始的数字索引),默认为 0。
RedisClusterCache:使用Redis自动分区缓存,其配置参数可以有:
CACHE_KEY_PREFIX:所有它都可以用于应用程序的应用程序使用相同的键;
CACHE_REDIS_CLUSTER:一串以逗号分隔的 Redis 集群节点地址;
CACHE_REDIS_PASSWORD:服务器的 Redis 密码。
MemcachedCache:使用memcached服务器作为缓存后端,支持pylibmc或memcache或Google应用程序引擎memcache库,其配置参数可以有:
CACHE_DEFAULT_TIMEOUT:如果未指定超时,则使用默认超时,时间单位是秒;
CACHE_KEY_PREFIX:所有它都可以用于应用程序的应用程序使用相同的键;
CACHE_MEMCACHED_SERVERS:服务器地址的列表或元组。
注意:Flask-Caching不会将额外的配置选项传递给memcached后端,要向这些缓存添加其他配置。
SASLMemcachedCache:启用SASL的memcached服务器作为缓存后端,其配置参数可以有:
CACHE_DEFAULT_TIMEOUT:如果未指定超时,则使用默认超时,时间单位是秒;
CACHE_KEY_PREFIX:所有它都可以用于应用程序的应用程序使用相同的键;
CACHE_OPTIONS:在缓存类实例化期间传递的可选字典;
CACHE_MEMCACHED_SERVERS:服务器地址的列表或元组;
CACHE_MEMCACHED_USERNAME:使用memcached进行SASL身份验证的用户名;
CACHE_MEMCACHED_PASSWORD:使用memcached进行SASL身份验证的密码。
UWSGICache:使用uwsgi服务器作为缓存,其配置参数可以有:
CACHE_UWSGI_NAME:要连接的uwsgi缓存实例的名称,例如:mycache @ localhost :3031,默认为空字符串;
注意:该UWSGICache没有维护也没有测试,不建议使用。
初始化
这里我们的缓存类型为RedisCache:
from flask import Flask
from flask_caching import Cache
#配置RedisCache缓存类型参数值,我们使用本地的redis,没有密码
config={ 'CACHE_TYPE':'redis', #使用redis作为缓存'CACHE_REDIS_HOST':'127.0.0.1', #redis地址'CACHE_REDIS_PORT':6379 #redis端口号
}app = Flask(__name__)
#初始化缓存
cache=Cache(app=app,config=config) #创建Cache对象
#或使用init_app()初始化缓存
#cache=Cache() #创建Cache对象
#cache.init_app(app=app,config=config)@app.route('/')
def hello_world():return 'Hello World!'if __name__ == '__main__':app.run()
我们可以根据需要可以将CACHE_REDIS_HOST换为服务器的地址。
Cache对象的主要方法有:
#装饰器,装饰无参数函数,缓存该函数
@cache.cached(timeout=None,key_prefix=None,unless=None,forced_update=None,query_string=False)
timeout为超时时间;
可选参数有:
key_prefix:缓存指定的函数;
unless:是否启用缓存,如果为True,不启用缓存;
forced_update:缓存是否实时更新,如果为True,无论是否过期都将更新缓存;
query_string:为True时,缓存键是先将参数排序然后哈希的结果。
#装饰器,装饰有参数函数,缓存该函数
@cache.memoize(timeout=None,make_name=None,unless=None,forced_update=None,query_string=False)
与cache.cached()方法类似,区别为cache.memoize有make_name,其作用是设置函数的标志,如果没有就使用装饰的函数。
使用缓存
我们可以使用缓存缓存视图函数、其他函数、对象(键值对)。
缓存视图函数
视图函数代码如下所示:
@app.route('/view')
@cache.cached(timeout=30) #设置超时时间
def view():time.sleep(2) #模拟数据加载时间return '视图函数缓存'
为了能更好地体现效果,我们通过设置休眠时间来模拟数据加载时间,启动Flask项目,浏览器访问http://127.0.0.1:5000/view,可以发现网页需要过了两秒才显示内容,在30秒内,我们再次访问该网页就会秒显示内容,过了30秒后,再次访问网页,又需要过两秒才显示内容。
其他函数
在缓存其他函数时,需要使用关键字key_prefix指定缓存哪个函数。代码如下所示:
@cache.cached(timeout=50, key_prefix='get_list')
def timesleep():time.sleep(2)return '缓存其他无参函数'@app.route('/others')
def others():return timesleep()
启动flask项目后,访问http://127.0.0.1:5000/others结果和刚才演示缓存视图函数一样。
缓存对象(键值对)
在缓存对象中,我们可以使用以下代码来设置、获取、删除缓存对象:
#设置
cache.set(key,value,timeout=None) #设置一个缓存对象
cache.set_many([(key,value),(key,value),...,(key,value)],timeout=None) #设置多个缓存对象
#获取
cache.get(key) #获取一个缓存对象
cache.get_many(key1,key2,....) #获取多个缓存对象
#删除
cache.get.delete(key) #删除一个缓存对象
cache_delete_many(key1,key2,...) #删除多个缓存对象
cache.clear() #删除所有缓存对象
为了方便演示,我们简单地操作缓存对象:
@app.route('/object')
def object():cache.set('name', '小明', timeout=30) #设置键为name,value为小明,超时时间为30秒的缓存对象print(cache.get('name')) #打印键为name的缓存对象值cache.set_many([('name1', '小明'), ('name2', '老王')],timeout=30) #设置多个缓存对象print(cache.get_many("name1", "name2")) #打印多个缓存对象值print(cache.delete("name")) #删除键为name的缓存对象print(cache.delete_many("name1", "name2")) #删除多个缓存对象return '缓存对象'
启动flask项目,访问http://127.0.0.1:5000/object,在pycharm中终端,如下图所示:
在web项目中,最常用到缓存对象的是短信验证码的有效时间。
好了,关于Flask框架——flask-caching缓存就讲到这里了,感谢观看,下篇文章我们学习Flask框架——消息闪现。
公众号:白巧克力LIN
该公众号发布Python、数据库、Linux、Flask、自动化测试、Git等相关文章!
- END -
Flask框架——flask-caching缓存相关推荐
- Flask框架(flask中的蓝图Blueprint)
1. 我们学习Flask框架,开始的时候是把所有的视图函数等都写在一个文件中 我们在这单个文件中可以定义路由.视图函数.定义模型等等. 但这显然存在一个问题:随着业务代码的增加,将所有代码都放在单个程 ...
- Flask框架(flask中的数据库SQLAlchemy(python3),配置、模型类、创建表)
1. SQLAlchemy是一个关系型数据库框架, 它提供了高层的ORM和底层的原生数据库的操作. flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展. 2. 安装 ...
- Flask框架(flask模板(jinja2)与字符串过滤器、列表过滤器以及自定义过滤器)
模板变量 : {{name}} 1. 模板的定义: 模板变量 : {{name}} 2. 模板的渲染: render_template("模板名字",键=值,键=值) ...
- Flask框架(flask中的请求上下文和应用上下文,以及请求钩子的使用,Flask-Script 扩展命令行)
1.请求上下文与应用上下文 请求上下文(request context) request和session都属于请求上下文对象. 应用上下文(application context) current_a ...
- Flask框架(flask中设置和获取session)
1. session 数据是保存到后端的数据库中 2.session中的从狭义和广义上分: (1)session,广义上 : 是一种机制:在前端当中存一个session_id , ...
- Flask框架(flask中对cookie的处理(设置cookie、获取cookie、删除cookie))
在Flask中对cookie的处理 1. 设置cookie: 设置cookie,默认有效期是临时cookie,浏览器关闭就失效 可以通过 max_age 设置有效期, 单位是秒 resp = make ...
- Flask框架(flask中设置响应信息的方法,返回json数据的方法)
设置响应信息的方法 1. 返回自定义的响应头,有两种方式: (1) 第一种是:视图函数return的时候,使用元组,返回自定义的信息 返回的时候的状态码可以自定义信息:&quo ...
- Flask框架(flask中的request对象,获取请求参数,保存上传的文件)
1.request中包含了前端发送过来的所有数据 ,请求的 request 对象中保存了一次HTTP请求的一切信息. 通过request.from可以直接发送提取请求体中的表单格式数据,是一个类字典的 ...
- Flask框架(flask中的邮件发送Flask-Mail(邮件扩展))
1. Flask的扩展包Flask-Mail通过包装了Python内置的smtplib包, 可以用在Flask程序中发送邮件. Flask-Mail连接到简单邮件协议(Simple Mail Tra ...
- Flask框架—flask中的session
Flask中的session session设置 Flask除请求对象之外,还有一个 session 对象. 它允许你在不同请求间存储特定用户的信息.它是在 Cookies 的基础上实现的,并且对 C ...
最新文章
- python3 文件 复制、重命名、移动、删除
- 神策数据受邀出席,携手亚马逊云科技共建智能家居新航海时代
- JZOJ 5618. 【NOI2018模拟3.31】华胥梦天
- html自动执行bat,html文件执行cmd指令
- C# 使用 Windows API 操作控件: SendMessage
- mybatis select 返回值long null_Mybatis框架(二)
- 如何在麦田拍出小清新?
- 如果华为自研的芯片无法给华为手机带来更高的性价比,那么华为自研芯片给消费者带来的意义是什么呢?
- 英特尔推出49量子比特芯片以加入量子统治权大战
- 2021-07-13 CNN池化理解学习
- 我是色色 -- 个人站开通 (*^__^*) 嘻嘻……
- 华为android强刷系统下载地址,华为强刷救砖卡刷包合集下载(一)共707GB
- MySQL源码调试入门
- 计算机械零件体积,第三章机械零件的工作能力和计算准则.docx
- 计算机顶级水平,2009年的顶级电脑配置, 相当于中国现在电脑的什么水平?
- 计算机毕业设计ssm吃到撑零售微商城
- Mysql 解决 Your password has expired.
- Word文档排版——自动编号
- HyperLynx(五)反射仿真
- 字节跳动自研 Web 构建工具 Rspack 正式发布