2010-04-04 44 views
0

我在谷歌應用引擎上的應用程序返回內容項目(只是文本)和對它們的評論。它是這樣工作的(僞代碼):在谷歌App Engine中有效地提供動態內容

query: get keys of latest content #query to datastore 
for each item in content 
    if item_dict in memcache: 
     use item_dict 
    else: 
     build_item_dict(item) #by fetching from datastore 
     store item_dict in memcache 
send all item_dicts to template 

對不起,如果代碼是不可理解的。我獲取所有內容字典並將它們發送到模板,該模板使用它們來創建網頁。我的問題是,如果memcache已經過期,對於我想要顯示的每個項目,我必須(1)在memcache中查找項目,(2)因爲沒有存在memcache我必須從數據存儲中獲取項目, 3)將項目存儲在內存緩存中。這些呼叫迅速建立起來。

我沒有設置到memcache的條目到期時間,所以這真的只發生在早上一次,但網頁花了足夠長的時間加載(約1秒),瀏覽器報告它不存在。通常,我的網頁大約需要50ms才能加載。

這種方法適合頻繁訪問,但它的缺點如上所示。我該如何補救?這些條目足夠動態,我認爲緩存我的初始請求並不符合我的最佳利益。

在此先感謝

回答

3

你可以批量操作 - 無論在內存緩存與數據存儲 - 並減少這一切一個往返到內存緩存,加上一個額外的數據存儲和內存緩存往返任何缺少的條目。請參閱memcache.get_multi and set_multidb.get上的文檔。

我不要設置爲 條目的內存緩存到期時間,所以這真的 僅在 上午發生一次,但網頁需要較長 足以載入(約1秒)的 瀏覽器報告它不存在。

咦?您的瀏覽器在1秒後放棄?

+0

謝謝,這會有很大的幫助。是的,由於某些原因,Chrome有時很容易放棄。 – awegawef 2010-04-04 21:45:06

+0

這聽起來像一個鉻的錯誤,而不是您的網頁的問題。 – 2010-04-06 15:39:35