2010-03-25 32 views
2

我很努力地找到一個很好的教程或最佳實踐文檔在應用引擎中使用memcache。白癡指南應用引擎和memcache

我很滿意它在文檔中提供的級別。通過ID獲取對象,首先檢查內存緩存,但我不清楚如下內容:

如果緩存查詢,是否存在一種可接受的方法,用於確保在查詢中存儲對象時緩存被清除/更新已更新。

使用ReferenceProperties有什麼影響?如果緩存帶有Bar引用的Foo對象。我的foo.bar在memcache中也是如此,如果它從我的應用程序的其他部分得到更新,則需要清除。

我不希望這裏的答案(除非你感覺特別慷慨!),但是我能讀的東西的指針會非常感激地收到。

+0

java?或蟒蛇? – Thilo 2010-03-25 01:34:06

+0

好點。蟒蛇。 – 2010-03-25 01:49:02

回答

3

如果緩存查詢,是否有確保 緩存刷新/清除當存儲在該查詢的 對象是 更新的 接受的方法。

通常情況下,如果它不在緩存中,則使用條件包裝您的讀取以檢索主數據庫中的值。只要包裝您的更新以便在您寫入數據時填充緩存。這就是說,如果您需要使結果儘可能保持最新 - 如果您沒有爲過期而煩惱,只需設置足夠低的失效時間,以便應用程序不得不重新請求來自主DB往往夠了。

0

關於引用屬性,假設您的MainModel和RefModel具有指向MainModel實例的引用屬性'ref'。無論何時cal cal ref_model.ref,它都會執行數據存儲獲取操作並從數據存儲中檢索對象。它不以任何方式與memcache進行交互。

2

輕鬆實現此目的的一種方法是搜索任何數據存儲put()調用並在其後設置memcache。接下來確保在嘗試數據存儲查詢之前從memcache獲取數據。寫入數據存儲後

套裝內存緩存:

data.put() 
memcache.set(user_id, data) 

嘗試做一個數據存儲查詢之前,從內存緩存中獲取數據:

data = memcache.get(user_id) 
if data is None: 
    data = Data.get_by_key_name(user_id) 
    memcache.set(user_id, data) 

使用內存緩存顯著降低應用程序引擎的成本。 More details關於我如何優化應用程序引擎。