Google AppEngine上的memcache多久会丢失一次数据?

时间:2010-04-15 23:49:44

标签: google-app-engine memcached

一般而言,Memcache和AppEngine具体是不可靠的,因为我的数据可能会因任何原因在任何时候从缓存中删除。但是,在某些情况下,可能存在使用memcache可能会增加性能的小风险的情况,例如更新memcache中的一些数据,这些数据会定期保存到其他更可靠的存储中。是否有任何来自Google的数字可以告诉我memcache条目在到期时间之前从缓存中丢失的实际可能性,因为我保持在我的配额范围内?

除了硬件故障和管理操作之外是否还有其他原因,例如数据中心的机器正在升级/移动/更换,这会导致条目过早地从memcache中删除?

4 个答案:

答案 0 :(得分:5)

Memcache与任何缓存一样,应该用作...... cache.如果你在缓存中找不到东西,必须有一个策略来在永久存储中找到它。

除了你提到的原因之外,Memcache和其他缓存方法对它们将保留的项目数量有限制(通常在缓存已满时丢弃最近最少使用的项目),并且通常还设置其他缓存失效策略(例如,将所有未使用的物品冲洗一小时。)

如果您没有自行配置和操作缓存,则无法保证何时以及如何有意/按设计从缓存中删除项目。

答案 1 :(得分:2)

您对此问题的任何具体答案都是100%可能会发生变化。

也就是说,我已经在轻负载下使用memcache来累积数据15分钟左右,然后再将其全部写入数据存储区。这是针对完全非关键的分析数据。不要依赖它。

答案 2 :(得分:2)

数据不会丢失,但如果数据丢失,可以轻松恢复。

例如,使用它来存储来自数据存储区的数据是理想的,因为如果一块数据不在缓存中,则可以很容易地获取它。 如果您在缓存中存储命中计数器等数据,则清除缓存时无法重新获取,因此您将丢失数据。

如果您担心普通作业的负载,那么如何使用任务队列设置作业以便稍后更新计数器?

答案 3 :(得分:0)

我已经实现了一个基于共享 -memcache的统计信息计数器,它每小时收集一次数据库并可以识别缓存丢失(记录它)。到目前为止,我看到在最多1小时(平均30分钟)缓存时间后,每天总共有10%的缓存损失,大约有60个活动计数器。反损失似乎是随机单一计数器。我怀疑,只增加一次的计数器(在我的情况下经常发生)可能有更高的被丢弃概率。

我的应用程序在共享内存缓存系统中使用< 1MB总内存缓存。不幸的是,使用最低1GB且每年大量成本的专用内存缓存是不可能的。 Stats counter used

我创建了一个stackdriver计数器,记录每隔一小时保存一次的计数器的memcache损失。该图显示成功保存为红色,而memcache以蓝色显示。计数器每隔一小时保存一次,并且在一小时内有一些计数。

Memcache loss (blue) vs. success (red)