### 導航
- [索引](# "總目錄")
- [下一頁](# "視圖裝飾器") |
- [上一頁](# "上傳文件") |
- [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
- 許可證
- 術語表