Google AppEngine上的memcache数据丢失频率有多高?

9

总的来说,Memcache 在 AppEngine 上并不可靠,我的数据可能因为任何原因随时从缓存中删除。然而,在某些情况下,使用 Memcache 可能会带来更好的性能,例如更新在 Memcache 中的一些数据,这些数据定期保存到其他更可靠的存储中。谷歌是否有任何数字可以给我一个实际的概率指示,即在保持我的配额范围内的情况下,一个 Memcache 条目在到期之前会被从缓存中丢失?

除了硬件故障和管理操作(如数据中心的机器升级/移动/替换),还有什么原因会导致条目过早地从 Memcache 中删除?

4个回答

6

Memcache(内存缓存),像任何缓存一样,应该被用作一个缓存。 如果你在缓存中找不到某个东西,必须有一种策略来在永久存储中找到它。

除了你提到的原因外,Memcache和其他缓存方法都有限制,它们只能容纳一定数量的项目(当缓存已满时通常会丢弃最近最少使用的项目),并且通常还会设置其他缓存失效策略(例如,清除未使用的所有内容一个小时)。

如果你没有配置和操作缓存,你就无法保证项目何时以及如何从缓存中被故意/设计地移除。


4
我很感谢你试图帮助我避免滥用Memcache而导致的自己栽跟头。不过,我真正想看到的是一些关于实际情况下我会有多少数据丢失的统计数据,以便做出明智的决策,决定是否值得冒险将某些数据仅保存在缓存中一段时间。 - SoftMemes
@Freed:你今天收集的统计数据明天可能已经不再有效。此外,对于任何你所收集到的数据要小心谨慎,因为你的样本量可能很小,而且其质量也是未知的。 - Eric J.
2
这正是为什么我正在寻找比仅仅进行自己的测量更可靠的数据的原因。我想看到的是类似于谷歌已经提供的延迟和吞吐量统计数据。 - SoftMemes

2
任何你得到的对于这个问题的具体答案都是可以100%地改变的。
话虽如此,我曾经在轻负载下使用Memcache累积数据约15分钟左右,然后将其全部写入Datastore。但这仅仅是为了非常不重要的分析数据。不要依赖它。

2
不是数据会丢失,而是如果丢失了,可以很容易地重新获取。例如,使用它来存储数据存储中的数据非常理想,因为如果缓存中没有某个数据,可以轻松获取。如果您将类似点击计数器之类的数据存储在缓存中,则如果清除缓存,则无法恢复数据,因此将丢失数据。如果您担心常见作业的负载,那么考虑设置作业以稍后使用任务队列更新计数器如何?

0

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

我的应用程序在共享内存缓存系统中使用少于1MB的总内存缓存。不幸的是,使用专用内存缓存,最低1GB和每年实质性的成本是不可能的。使用的统计计数器

我创建了一个Stackdriver计数器,记录每个完整小时保存的计数器的内存缓存丢失情况。图表显示成功保存为红色,内存缓存失败为蓝色。计数器每个完整小时保存一次,并在该小时内进行几次计数。

Memcache loss (blue) vs. success (red)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接