### 导航
- [索引](# "总目录")
- [下一页](# "视图装饰器") |
- [上一页](# "上传文件") |
- [Flask 0.10.1 文档](#) »
- [Flask 代码模式](#) »
# 缓存
如果您的应用运行很慢,那就尝试引入一些缓存吧。好吧,至少这是提高表现最简单的方法。缓存的工作是什么呢?比如说您有一个需要一段时间才能完成的函数,但是这个函数的返回结果可能在5分钟之内都是足够有效的,因此您可以将这个结果放到缓存中一段时间,而不用反复计算。
Flask 本身并不提供缓存功能,但是作为Flask 基础的 Werkzeug 库,则提供了一些基础的缓存支持。Werkzeug 支持多种缓存后端,通常的选择是 Memcached 服务器。
### 配置缓存
类似于建立 [Flask](# "flask.Flask") 的对象一样,您创建一个缓存对象,然后让他保持存在。如果您使用的是开发服务器,您可以创建一个 [SimpleCache](http://werkzeug.pocoo.org/docs/contrib/cache/#werkzeug.contrib.cache.SimpleCache "(在 Werkzeug v0.10)") [http://werkzeug.pocoo.org/docs/contrib/cache/#werkzeug.contrib.cache.SimpleCache]对象,这个对象将元素缓存在 Python 解释器的控制的内存中:
~~~
from werkzeug.contrib.cache import SimpleCache
cache = SimpleCache()
~~~
如果您希望使用 Memcached 进行缓存,请确保您已经安装了 Memcache 模块支持(您可以通过 PyPi<http://pypi.python.org/ 获取),并且有一个可用的 Memcached服务器正在运行。然后您可以像下面这样连接到缓存服务器:
~~~
from werkzeug.contrib.cache import MemcachedCache
cache = MemcachedCache(['127.0.0.1:11211'])
~~~
如果您在使用 App Engine ,您可以轻易地通过下面的代码连接到 App Engine 的缓存服务器:
~~~
from werkzeug.contrib.cache import GAEMemcachedCache
cache = GAEMemcachedCache()
~~~
### 使用缓存
有两个非常重要的函数可以用来使用缓存。那就是 [get()](http://werkzeug.pocoo.org/docs/contrib/cache/#werkzeug.contrib.cache.BaseCache.get "(在 Werkzeug v0.10)") [http://werkzeug.pocoo.org/docs/contrib/cache/#werkzeug.contrib.cache.BaseCache.get]函数和 [set()](http://werkzeug.pocoo.org/docs/contrib/cache/#werkzeug.contrib.cache.BaseCache.set "(在 Werkzeug v0.10)") [http://werkzeug.pocoo.org/docs/contrib/cache/#werkzeug.contrib.cache.BaseCache.set] 函数。他们的使用方法如下:
从缓存中读取项目,请使用 [get()](http://werkzeug.pocoo.org/docs/contrib/cache/#werkzeug.contrib.cache.BaseCache.get "(在 Werkzeug v0.10)") [http://werkzeug.pocoo.org/docs/contrib/cache/#werkzeug.contrib.cache.BaseCache.get] 函数,如果现在缓存中存在对应项目,它将会返回。否则函数将会返回 None
~~~
rv = cache.get('my-item')
~~~
在缓存中添加项目,使用 set() 函数。第一个参数是想要设定的键,第二个参数是想要缓存的值。您可以设定一个超时时间,当时间超过时,缓存系统将会自动清除这个项目。
以下是一个通常情况下实现功能完整例子:
~~~
def get_my_item():
rv = cache.get('my-item')
if rv is None:
rv = calculate_value()
cache.set('my-item', rv, timeout=5 * 60)
return rv
~~~
© 版权所有 2013, Armin Ronacher.
- 欢迎使用 Flask
- 前言
- 给有经验程序员的前言
- 安装
- 快速入门
- 教程
- 介绍 Flaskr
- 步骤 0: 创建文件夹
- 步骤 1: 数据库模式
- 步骤 2: 应用设置代码
- 步骤 3: 创建数据库
- 步骤 4: 请求数据库连接
- 步骤 5: 视图函数
- 步骤 6: 模板
- 步骤 7: 添加样式
- 福利: 应用测试
- 模板
- 测试 Flask 应用
- 记录应用错误
- 配置处理
- 信号
- 即插视图
- 应用上下文
- 请求上下文
- 用蓝图实现模块化的应用
- Flask 扩展
- 与 Shell 共舞
- Flask 代码模式
- 大型应用
- 应用程序的工厂函数
- 应用调度
- 使用 URL 处理器
- 部署和分发
- 使用 Fabric 部署
- 在 Flask 中使用 SQLite 3
- 在 Flask 中使用 SQLAlchemy
- 上传文件
- 缓存
- 视图装饰器
- 使用 WTForms 进行表单验证
- 模板继承
- 消息闪现
- 用 jQuery 实现 Ajax
- 自定义错误页面
- 延迟加载视图
- 在 Flask 中使用 MongoKit
- 添加 Favicon
- 数据流
- 延迟请求回调
- 添加 HTTP Method Overrides
- 请求内容校验码
- 基于 Celery 的后台任务
- 部署选择
- mod_wsgi (Apache)
- 独立 WSGI 容器
- uWSGI
- FastCGI
- CGI
- 聚沙成塔
- API
- JSON 支持
- Flask 中的设计决策
- HTML/XHTML 常见问题
- 安全注意事项
- Flask 中的 Unicode
- Flask 扩展开发
- Pocoo 风格指引
- Python 3 支持
- 升级到最新版本
- Flask Changelog
- 许可证
- 术语表