缓存

如果您的应用运行很慢,那就尝试引入一些缓存吧。 好吧,至少这是提高表现 最简单的方法。 缓存的工作是什么呢? 比如说您有一个需要一段时间才能完成 的函数,但是这个函数的返回结果可能在5分钟之内都是足够有效的,因此您可以 将这个结果放到缓存中一段时间,而不用反复计算。 所以,然后的想法是,你实际上把计算的结果缓存一段时间。

Flask 本身并不提供缓存功能,但是作为Flask 基础的 Werkzeug 库,则提供了一些 基础的缓存支持。 Werkzeug 支持多种缓存后端,通常的选择是 Memcached 服务器。

设置缓存

类似于建立 Flask 的对象一样,您创建一个缓存对象,然后让他 保持存在。 如果使用开发服务器,您可以创建一个SimpleCache对象,一个简单的缓存将该项目存储在Python解释器的内存中:

from werkzeug.contrib.cache import SimpleCache
cache = SimpleCache()

如果你想使用memcached,请确保有一个memcache模块支持(你从PyPI获取它们)和一个在某处运行的memcached服务器。这是如何连接到这样的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()set()这是如何使用它们:

要从缓存中获取项目,请使用字符串作为键名称调用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