2012-10-01 151 views
0

我使用GAE NDB數據存儲的最新10條記錄生成RSS提要。數據庫中的記錄每週更新一次。每次用戶請求RSS提要顯示時,如何避免查詢數據存儲?即如何緩存?如何緩存RSS提要?

回答

2

您可以使用memcache避免每次訪問數據存儲。你可能知道查詢不會緩存在NDB中。

https://developers.google.com/appengine/docs/python/memcache/usingmemcache

def get_data(): 
    data = memcache.get('key') 
    if data is not None: 
     return data 
    else: 
     data = self.query_for_data() 
     memcache.add('key', data, 60) 
     return data 

所以,換句話說,試圖從內存緩存讓您的數據,如果失敗從數據庫中獲取它,然後將其添加到內存緩存爲下一次輪。

上面的示例使用60秒超時(在.add調用中的值爲60)只要memcache允許,只需將該參數留出即可讓數據保持不變。

從一個類似的問題

另外:NDB Caching When Using Projected Queries

key.get()將被緩存在高速緩存中檢索,但query.get()不會從緩存中檢索。 https://developers.google.com/appengine/docs/python/ndb/cache

從文檔:查詢不查找任何緩存中的值。但是,如果高速緩存策略如此說明(但從不到Memcache),則查詢結果將寫回到上下文高速緩存中。

因此,如果您通過密鑰獲取,您將自動從NDB緩存中獲取數據(如果可用),但我沒有親自使用過它。

因此,構建您的RSS內容,並在渲染之前將其保存到memcache中。然後,當您更新其創建的內容時,只需使緩存版本無效(請參閱文檔),以便下一個請求將從數據存儲中獲取該內容,然後將其放回緩存中。

+0

謝謝! '構建你的RSS內容,並且在渲染之前,將它保存到memcache中是關鍵! –