Flask-Cache的使用
当一个资源需要从服务器中获取,并且资源比较庞大,服务器可能处理起来比较慢,并且此功能为热门功能,可能用户需要经常访问获取。此时,服务器就可以考虑缓存技术。缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。接下来将记录一下如何缓存一个Flask的请求,并且记录一下Flask的缓存扩展库Flask-Cache
:
安装
pip install flask-cache
- 1
初始化
当我们安装好了Flask-Cache
模块时,我们还需要对其进行实例化,并进行相应的配置:
from flask import Flask
from flask_cache import Cacheapp = Flask(__name__)
cache = Cache(app,config={"CACHE_TYPE":"simple"
})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
也可以使用init_app()
方法稍后设置你的实例:
app = Flask(__name__)
cache = Cache(config={"CACHE_TYPE":"simple"
})
cache.init_app(app)
- 1
- 2
- 3
- 4
- 5
或者也可以这样:
app = Flask(__name__)
cache = Cache()
cache.init_app(app,config={"CACHE_TYPE":"simple"
})
- 1
- 2
- 3
- 4
- 5
缓存视图函数
要缓存视图函数,你可以使用@cache.cached()
装饰器,这个装饰器默认使用request.path作为cache_key:
@app.route("/get_info")
@cache.cached()
def get_info():print "no cache"return "it is ok!"
- 1
- 2
- 3
- 4
- 5
@cache.cached()
装饰器还可以接收参数,如参数timeout
设置缓存过期时间;参数unless
接收一个Bool类型的值,如果设置为True
将不会使用缓存机制;参数key_prefix
替换默认的cache_key
缓存其他函数
使用@cache.cached()
装饰器可以缓存其它非视图相关函数的结果,当使用@cache.cached()
装饰器缓存非视图相关函数的结果时,建议传入参数key_prefix
来替换默认的cache_key,否则它将会默认使用request.path作为cache_key:
@cache.cached(timeout=30,key_prefix="aaa")
def sum_data(a,b):return int(a) + int(b)
- 1
- 2
- 3
memoize()
在@cache.memoize()
装饰器中,函数的参数也包含在cache_key中:
@cache.memoize(timeout=30)
def sum_data(a,b):return int(a) + int(b)
- 1
- 2
- 3
值得注意的是,对于不接收参数的函数来说,@cache.memoize()
与@cache.cached()
是一样的
清除缓存
以下是一个用于清除应用程序缓存的示例脚本:
from manager import app,cachewith app.app_context():cache.clear()
- 1
- 2
- 3
- 4
配置
Flask-Cache
支持多个类型作为缓存后端,不同的缓存后端,配置项也不尽相同,接下来记录一下Flask-Cache
支持的缓存后端:
- null:无缓存。相关配置项如下:
配置 | 说明 |
---|---|
CACHE_ARGS | 在缓存类实例化过程中解包和传递的可选列表 |
CACHE_OPTIONS | 可选字典在缓存类实例化期间传递 |
- simple:使用本地python字典进行存储,这不是线程安全的。相关配置项如下:
配置 | 说明 |
---|---|
CACHE_DEFAULT_TIMEOUT | 默认过期/超时时间,单位为秒 |
CACHE_THRESHOLD | 缓存的最大条目数 |
CACHE_ARGS | 在缓存类实例化过程中解包和传递的可选列表 |
CACHE_OPTIONS | 可选字典在缓存类实例化期间传递 |
- filesystem:使用文件系统来存储缓存的值。相关配置项如下:
配置 | 说明 |
---|---|
CACHE_DEFAULT_TIMEOUT | 默认过期/超时时间,单位为秒 |
CACHE_DIR | 存储缓存的目录 |
CACHE_THRESHOLD | 缓存的最大条目数 |
CACHE_ARGS | 在缓存类实例化过程中解包和传递的可选列表 |
CACHE_OPTIONS | 可选字典在缓存类实例化期间传递 |
- memcached:使用memcached服务器作为缓存后端,支持pylibmc
或memcache
或Google应用程序引擎memcache
库。相关配置项如下:
配置 | 说明 |
---|---|
CACHE_DEFAULT_TIMEOUT | 默认过期/超时时间,单位为秒 |
CACHE_KEY_PREFIX | 设置cache_key的前缀 |
CAHCE_MEMCACHED_SERVERS | 服务器地址的列表或元组 |
CACHE_ARGS | 在缓存类实例化过程中解包和传递的可选列表 |
CACHE_OPTIONS | 可选字典在缓存类实例化期间传递 |
- redis:使用Redis作为缓存后端。相关配置项如下:
配置 | 说明 |
---|---|
CACHE_DEFAULT_TIMEOUT | 默认过期/超时时间,单位为秒 |
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
|
CACHE_ARGS | 在缓存类实例化过程中解包和传递的可选列表 |
CACHE_OPTIONS | 可选字典在缓存类实例化期间传递 |
举个栗子:
from flask import Flask
from flask_cache improt Cacheapp = Flask(__name__)
cache = Cache(app,config={"CACHE_TYPE":"redis","CACHE_REDIS_HOST":"192.168.0.158","CACHE_REDIS_PORT":6379,"CACHE_REDIS_PASSWORD":"123456","CACHE_REDIS_DB":2
})@app.route("/get_info")
@cache.cached(timeout=30)
def get_info():print "no cache!"return "it is ok!"if __name__ == "__main__":app.run()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- saslmemcached:使用memcached服务器作为缓存后端,打算与支持SASL的连接一起使用到memcached服务器。
pylibmc
是必须的,SASL必须由libmemcached
支持。相关配置项如下:
配置 | 说明 |
---|---|
CACHE_DEFAULT_TIMEOUT | 默认过期/超时时间,单位为秒 |
CACHE_KEY_PREFIX | 设置cache_key的前缀 |
CAHCE_MEMCACHED_SERVERS | 服务器地址的列表或元组 |
CACHE_MEMCACHED_USERNAME | 使用memcached进行SASL认证的用户名 |
CACHE_MEMCACHED_PASSWORD | 使用memcached进行SASL认证的密码 |
CACHE_ARGS | 在缓存类实例化过程中解包和传递的可选列表 |
CACHE_OPTIONS | 可选字典在缓存类实例化期间传递 |
Flask-Cache的使用相关推荐
- flask cache
测试代码: import time from flask.ext.cache import Cache from flask import Flaskapp = Flask(__name__) app ...
- flask中的所有第三方模块大集合
关于flask你想要的这里都有!!! Flask-AppBuilder - Simple and rapid Application builder, includes detailed securi ...
- from flask.ext.cache import make_template_fragment_key
d:\ProgramData\Anaconda3\envs\FlaskPath\lib\site-packages\flask_cache\jinja2ext .py 找到该文件,将from flas ...
- flask 使用cache时 报错 No module named 'flask.ext'
- CentOS 部署 flask项目
原文地址 最近在学习 python,使用 flask 实现了个个人博客程序,完了想部署到服务器上.因为是新手,一路磕磕绊绊最终把它基本搞定.网上资料对新手感觉都不太友好,都是零零碎碎的,所以我整理了一 ...
- web框架总结(django、flask)
1.MVC解读 M:Model,模型,和数据库进行交互 V:View,视图,负责产生Html页面 C:Controller,控制器,接收请求,进行处理,与M和V进行交互,返回应答. 1.用户点击注 2 ...
- 22.executor service Flask
pip包管理器 没有npm那么强大 不支持 npm --save install 这样的方法 但是我们有别的方法 安装Flask 但是呢 我们不能把它存放在package .json 那就需要我们自己 ...
- python flask源码解析_用尽洪荒之力学习Flask源码
[TOC] 一直想做源码阅读这件事,总感觉难度太高时间太少,可望不可见.最近正好时间充裕,决定试试做一下,并记录一下学习心得. 首先说明一下,本文研究的Flask版本是0.12. 首先做个小示例,在p ...
- 用 Flask 来写个轻博客 (35) — 使用 Flask-RESTful 来构建 RESTful API 之四
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 POST 请求 身份认证 测试 前文列表 用 Flask 来写个轻博客 ...
- 用 Flask 来写个轻博客 (29) — 使用 Flask-Admin 实现后台管理 SQLAlchemy
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 Flask-Admin BaseView 基础管理页面 Mo ...
最新文章
- 预测 motif 的计算原理
- wkhtmltopdf
- SQLSERVER数据库日志文件过大,如何压缩并定期清理 ?
- java卸载_java快速入门篇之windows-MySQL-5.6安装与卸载
- filebeat+elk简单搭配
- html 模板中的for循环,Flask模板引擎中的For循环
- vuepc端实现数据加载_多模态注意力机制+多模态数据,完全实现端到端课堂活动检测|ICASSP 2020...
- stm32 SPI架构
- 英寸和厘米的交互python_Python的新手-尝试将厘米编码为英寸,反之亦然
- 基于JAVA+SpringMVC+Mybatis+MYSQL的疫情防控物业管理系统
- 古代的酒到底多少度,为何古人动不动喝好几坛都不会醉呢?
- TypeError: '
- 在fc6上安装myeclipse全程记录
- 架构设计说明书该怎么写?
- 两阶段随机规划模型简介
- 软件测试————第二章
- css 剪辑图片_css如何截取图片?
- c语言编程TLC2543AD采集,51单片机驱动12位AD转换TLC2543电路图+程序
- What are default and maximum values of dev_loss_tmo in Red Hat Enterprise Linux 6
- 智力题库软件测试,最新软件测试笔试题网友回忆版
热门文章
- 2020CCPC(威海) - Clock Master(数论+分组背包)
- 洛谷 - P4768 [NOI2018]归程(Kruskal重构树+树上倍增+最短路)
- CodeForces - 1344D Monopole Magnets(dfs)
- CodeForces - 1332D Walk on Matrix(构造)
- HDU - 1542 Atlantis(线段树+扫描线)
- php中如何固定表格宽度,实例讲解DataTables固定表格宽度(设置横向滚动条)
- HDU3400(计算几何中的三分法利用)
- 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----SYN(洪水攻击)篇
- C++设计模式之访问者模式
- C++开发中的pImpl方法