即使尽量从应用上面规划 memcache 使用也有问题:据目前观察,GAE/J 上面的 memcache 最多可缓存的大小和应用实例内存占用相关。
大概关系是最多使用内存的实例的内存使用量 + memcache 当前缓存使用量 大于 200M 时 memcache 会开始回收缓存,并且不是只回收一点点,而是基本将整个 memcache 清空。
对于 Java 应用来说,空实例启动内存基本就在 50M 了,随便写几个 Servlets 基本就玩完 200M 了,Memcache 形同虚设,基本没有什么命中可谈。
迫于无奈,改成本地缓存,设置实例配置(使其尽量不会产生多实例,减少本地缓存造成不一致的可能性),勉强维持在免费配额内。
问题是,本地缓存直接占用实例内存,这导致的问题是内存使用到上限(280M 左右?)实例将被直接干掉。继续观察,调整本地缓存上限容量。
这无限制地折腾下去,奔溃是迟早的事。所以,就像 @
Livid 说的那样,目前 GAE 的计价模型非常不适合做动态网站,GAE 官网说用 memcache 来优化也是扯淡。