目录

安装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缓存相关推荐

  1. Flask框架(flask中的蓝图Blueprint)

    1. 我们学习Flask框架,开始的时候是把所有的视图函数等都写在一个文件中 我们在这单个文件中可以定义路由.视图函数.定义模型等等. 但这显然存在一个问题:随着业务代码的增加,将所有代码都放在单个程 ...

  2. Flask框架(flask中的数据库SQLAlchemy(python3),配置、模型类、创建表)

    1.  SQLAlchemy是一个关系型数据库框架, 它提供了高层的ORM和底层的原生数据库的操作. flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展. 2. 安装 ...

  3. Flask框架(flask模板(jinja2)与字符串过滤器、列表过滤器以及自定义过滤器)

    模板变量 : {{name}} 1. 模板的定义: 模板变量 : {{name}} 2. 模板的渲染:  render_template("模板名字",键=值,键=值)       ...

  4. Flask框架(flask中的请求上下文和应用上下文,以及请求钩子的使用,Flask-Script 扩展命令行)

    1.请求上下文与应用上下文 请求上下文(request context) request和session都属于请求上下文对象. 应用上下文(application context) current_a ...

  5. Flask框架(flask中设置和获取session)

    1. session 数据是保存到后端的数据库中 2.session中的从狭义和广义上分:   (1)session,广义上 :          是一种机制:在前端当中存一个session_id , ...

  6. Flask框架(flask中对cookie的处理(设置cookie、获取cookie、删除cookie))

    在Flask中对cookie的处理 1. 设置cookie: 设置cookie,默认有效期是临时cookie,浏览器关闭就失效 可以通过 max_age 设置有效期, 单位是秒 resp = make ...

  7. Flask框架(flask中设置响应信息的方法,返回json数据的方法)

    设置响应信息的方法 1.  返回自定义的响应头,有两种方式: (1)  第一种是:视图函数return的时候,使用元组,返回自定义的信息           返回的时候的状态码可以自定义信息:&quo ...

  8. Flask框架(flask中的request对象,获取请求参数,保存上传的文件)

    1.request中包含了前端发送过来的所有数据 ,请求的 request 对象中保存了一次HTTP请求的一切信息. 通过request.from可以直接发送提取请求体中的表单格式数据,是一个类字典的 ...

  9. Flask框架(flask中的邮件发送Flask-Mail(邮件扩展))

    1.  Flask的扩展包Flask-Mail通过包装了Python内置的smtplib包, 可以用在Flask程序中发送邮件. Flask-Mail连接到简单邮件协议(Simple Mail Tra ...

  10. Flask框架—flask中的session

    Flask中的session session设置 Flask除请求对象之外,还有一个 session 对象. 它允许你在不同请求间存储特定用户的信息.它是在 Cookies 的基础上实现的,并且对 C ...

最新文章

  1. python3 文件 复制、重命名、移动、删除
  2. 神策数据受邀出席,携手亚马逊云科技共建智能家居新航海时代
  3. JZOJ 5618. 【NOI2018模拟3.31】华胥梦天
  4. html自动执行bat,html文件执行cmd指令
  5. C# 使用 Windows API 操作控件: SendMessage
  6. mybatis select 返回值long null_Mybatis框架(二)
  7. 如何在麦田拍出小清新?
  8. 如果华为自研的芯片无法给华为手机带来更高的性价比,那么华为自研芯片给消费者带来的意义是什么呢?
  9. 英特尔推出49量子比特芯片以加入量子统治权大战
  10. 2021-07-13 CNN池化理解学习
  11. 我是色色 -- 个人站开通 (*^__^*) 嘻嘻……
  12. 华为android强刷系统下载地址,华为强刷救砖卡刷包合集下载(一)共707GB
  13. MySQL源码调试入门
  14. 计算机械零件体积,第三章机械零件的工作能力和计算准则.docx
  15. 计算机顶级水平,2009年的顶级电脑配置, 相当于中国现在电脑的什么水平?
  16. 计算机毕业设计ssm吃到撑零售微商城
  17. Mysql 解决 Your password has expired.
  18. Word文档排版——自动编号
  19. HyperLynx(五)反射仿真
  20. 字节跳动自研 Web 构建工具 Rspack 正式发布

热门文章

  1. Java笔记07——类和对象
  2. IDEA相对路径系统找不到指定的文件问题
  3. 教你从零做起谷歌Adsense。开户,过审核,过pin码达到稳定收益
  4. 三观|腾讯马化腾年刊《三观》年度期刊前言
  5. @Validated和@Valid的使用
  6. Urlrewrite(url地址重写)和UrlRewriteFilter
  7. 热门好用的企业网盘工具大盘点
  8. unity urp 实现丝绸渲染
  9. PR-Place-performing Placement and Optimization-2
  10. adobe cs5全线作品