2010-04-15 23 views
8

從某種意義上說,無論出於何種原因,我的數據可能會在任何時候從緩存中刪除,因此一般而言和特定於AppEngine的Memcache是​​不可靠的。但是,在某些情況下,可能會出現這樣的情況:使用memcache可能會帶來一些小風險,例如更新memcache中的一些數據,這些數據會定期保存到其他更可靠的存儲中。考慮到我保持在我的配額範圍內,有沒有Google提供的任何數字可以指示在高速緩存到期之前memcache條目從緩存中丟失的實際可能性?Google AppEngine上的memcache會多久失去一次數據?

是否有升級,如在數據中心的機器硬件故障和行政業務以外的任何理由/移除/更換了會導致條目從內存緩存過早刪除?

回答

5

與任何緩存一樣,Memcache應該用作...... a cache.如果在緩存中找不到某些內容,則必須有策略在永久存儲中找到它。

除了你提到的原因之外,Memcache和其他緩存方法對它們將容納的項目數量也有限制(通常在緩存已滿時丟棄最少使用的項目),並且通常還設置其他緩存失效策略(例如,沖洗一小時內未使用的所有東西)。

如果不配置和操作自己的緩存,你何時以及如何項目可能從緩存故意/設計被移除的沒有保證。

+4

我明白,你要幫我使用內存緩存爲除緩存以外的東西避免(AB)拍攝自己的腳。但是,我真正想看到的是一些統計數據,說明我在實踐中會多少次丟失數據,以便做出明智的決定:是否值得冒險將某些數據保留在緩存中時間。 – SoftMemes 2010-04-16 14:29:44

+0

@Freed:你今天可能收集的統計數據明天可能無效。另外,請謹慎對待您收集的任何統計數據,因爲您的樣本量很小,質量不明。 – 2010-04-16 16:51:02

+2

......這正是我尋找更可靠的數據的原因,而不僅僅是我自己的測量。我希望看到的是Google已經提供的延遲和吞吐量統計數據。 – SoftMemes 2010-04-16 17:34:17

2

你對這個問題的任何具體答案是100%可能會改變。

這麼說,我已經使用了輕負載下的內存緩存所有寫入的數據存儲之前積累了15分鐘左右的數據。儘管這是完全非關鍵的分析數據。不要依賴它。

2

這並不是說數據可能會丟失,但是如果它丟失了,它很容易重新獲得。

例如,使用它來存儲數據從數據存儲中是理想的,因爲如果一個數據不在高速緩存中,它可以很容易地取出。
如果您將數據(如計數器)存儲在緩存中,如果緩存被清除,則無法恢復,因此您將丟失數據。

如果你擔心負載爲一個共同的任務,如何設置一個作業來更新計數器後,使用任務隊列?

0

我已經實施了共享 -memcache基於統計計數​​器,每小時收集到數據庫並可以識別高速緩存丟失(記錄它)。到目前爲止,我經常看到<在大約1小時(平均30分鐘)的高速緩存時間之後每天有10%的高速緩存丟失總數,有大約60個活動計數器。計數器損失似乎是隨機的單個計數器。我懷疑,只增加一次的計數器(在我的情況下經常發生)可能有較高的丟失概率。

我的應用將使用在共享內存緩存系統< 1MB總內存緩存。不幸的是,使用每年至少有1GB和大量成本的專用內存緩存是不可能的。 Stats counter used

我已經創建了一個stackdriver計數器,它記錄每整整一個小時保存的計數器的memcache丟失。該圖顯示成功保存爲紅色,並且內存緩存失敗爲藍色。計數器可以保存每一整小時,並且在一小時內有幾個計數。

Memcache loss (blue) vs. success (red)

相關問題