GAE 上 Memcache 的回写策略

Posted

技术标签:

【中文标题】GAE 上 Memcache 的回写策略【英文标题】:Write back strategy for Memcache on GAE 【发布时间】:2013-06-19 19:23:13 【问题描述】:

我的 App Engine (Java) 应用程序计划处理需要频繁更新许多项目的数据结构。数据量不打算超过 1000 条记录(每个客户端),但客户端的数量是无限的,所以我不愿意为了更新一些计数器而每秒进行 1000 次读取和 1000 次写入。

当然,我正在考虑使用 Memcache。理想情况下,数据应该一直在内存中,这样我就可以经常阅读和更新它。仅当缓存已满或 VM 正在关闭(我最关心的问题)时,才应将其写入数据存储。我可以实现某种write-back strategy,其中缓存仅在需要时写入存储?

特别是我的两个问题是:

    我如何知道某个项目何时从缓存中删除? 我如何知道 VM 何时关闭,以便我可以持久化缓存的内容?

【问题讨论】:

【参考方案1】:

简短回答:不。

更长的答案:Memcache 不提供任何保证。

有用的答案:看https://developers.google.com/appengine/articles/scaling/memcache#transient。如果可以选择丢失数据,则可以依赖 memcache(但有时可能会丢失某些内容)。

不必担心虚拟机被关闭:Memcache 在实例虚拟机之外运行,并在所有应用实例虚拟机之间共享。

【讨论】:

感谢您的回答。如果 Memcache 在 VM 之外运行,我是否可以在缓存中放置一个条目,即使实例没有启动一次,它明天仍然存在? 是的,但不能保证:它可能不会在第二天出现。 必须强调其很大的“无保证”。设计您的应用程序,以便它可以在几分钟内处理 memcache 中丢失的数据。即写入 memcache 并希望稍后将其获取到数据存储区,只有在您不介意有时会丢失一些数据的情况下才会起作用。 哦,你不会被告知它消失了,它只是不存在。它是一个缓存。

以上是关于GAE 上 Memcache 的回写策略的主要内容,如果未能解决你的问题,请参考以下文章

如何确保 GAE 上的 MemCache 和 Datastore 之间的一致性?

python gae-memcache-decorator.py

注意区分Memcached与Memcache差别

Eclipse+PyDev+GAE memcache“来自导入的未定义变量:get”

memcache

分布式memcache