2011-03-02 21 views
1

在Google App Engine(python)上,我需要使用memcache保存數據並在另一頁上快速讀取數據。保存memcache數據後,GAE立即可用嗎?

但是在我開始編碼以保存memcache之前,然後在下一頁我用已知密鑰打開這些數據,我開始懷疑數據是否會一直存在於下一頁上?需要多長時間來緩存數據,並可靠地在下一頁閱讀?這是一個問題,因爲它是一項雲服務,或者即使它位於一臺服務器上,這也會成爲問題嗎?或者這不是一個問題,我可以指望它在下一頁出現嗎?

注:此方法不是我的web應用程序的中樞,它只是我需要用於一種情況的特例。另外,對於這種情況,我不想在查詢字符串,Cookie或標題值的頁面之間持久保存數據。

回答

3

分佈式內存緩存體系結構有一個memcache實例池,它服務於所有Google App Engine應用程序;存儲的數據不會在內存緩存服務器之間複製。

將數據成功保存到memcache後,您的數據將存在*,因爲它存儲在一個特定的Memcache實例中。

*一個警告:值可以從高速緩存在內存不足

2

在實踐中,這些數據可能會在那裏的大部分時間,但你不能指望它,通過設計 - 看docs:當考慮

然而,是否 存儲值僅在內存緩存 中,而不是由其他持久性內存 支持,請確保您的應用程序 在值爲 時突然不可用時的行爲可以接受。 值 可以隨時從內存緩存中到期, ,並且可以在爲該值設置的 到期截止日期之前過期。 例如,如果突然缺失用戶的會話數據將導致會話出現故障,則除了memcache以外,該數據 可能應該存儲在 數據存儲中。

(重點煤礦)

3

我不相信有什麼特別與GAE實現這樣的memcached緩存值將可它們被設置後,所以是的,這將是可用在下一頁上,除非因爲memcached服務器達到內存限制而過期。谷歌似乎並沒有限制你可以在memcache中存儲多少數據,只有你可以提出的請求數量,所以實際上我懷疑這是一個問題。

依賴緩存值是不好的做法,在所有情況下,您都應該使用下面的模式。

key = generate_key() 
value = memcache.get(key) 
if value is None: 
    value = generate_value() 
    memcache.set(key, value) 
+0

問題我無法找到答案的情況下被驅逐 - 內存緩存的GAE版本distrubuted,但我無法找到有關如何工作的細節。在OP的情況下,第1頁和第2頁是否可能由不同的服務器處理,如果可以,他們是否可以訪問memcached數據? – bgporter 2011-03-02 15:11:26

+0

您使用的密鑰被散列,每個memcache服務器處理散列空間的不同部分。因此,如果客戶端被配置爲使用同一組memcache服務器,那麼他們將查看同一個密鑰的相同特定服務器。如果兩個請求由不同的數據中心處理,它們不會使用同一組服務器,則可能無法訪問相同的數據。這將作爲一個單獨的SO問題更好:-) – 2011-03-02 15:41:45

相關問題