企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
### 导航 - [索引](# "总目录") - [下一页](# "视图装饰器") | - [上一页](# "上传文件") | - [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.