緩存¶
當你的應用變慢的時候,可以考慮加入緩存。至少這是最簡單的加速方法。緩存有什 么用?假設有一個函數耗時較長,但是這個函數在五分鍾前返回的結果還是正確的。 那么我們就可以考慮把這個函數的結果在緩存中存放一段時間。
Flask 本身不提供緩存,但是它的基礎庫之一 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 memcache 服務器:
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