Memcached:缓存对象总是好的? (GAE Objectify)

时间:2012-12-10 12:20:26

标签: google-app-engine caching memcached objectify

上下文:使用Memcached。 (使用Google App Engine和Objectify,但这无关紧要)

我将创建一个简单的例子,一个带有两个实体玩家和游戏的游戏。用户通常可以查询打开的单个请求游戏,甚至是玩家个人资料。可能会开100场比赛或300万场比赛。

(1)对所有实体使用缓存是个好主意?如果我有未使用的RAM,为什么不将它与游戏或玩家一起使用? 对此有不好的理由吗? (除了几乎没有时间缓存访问数据之外)

(2)另一个问题是,在加载对象时,我应该进行分区以优化存储的对象吗?和缓存?,例如:

player {
  email
  pass

  punctuation          // This data will change quite frequently
  numGamesClosed       // This data will change quite frequently
}

也许更好:

 @Entity     //DataStore entity
 player {
    email
    pass
 }

 @Cache     //The entity will be cached into Memchached
 @Entity    //DataStore entity
 DatosJugador
 {
    @Parent Key <Player> owner;
    punctuation
    numGamesClosed      
 }

非常感谢

1 个答案:

答案 0 :(得分:3)

memcache使用的“ram”不是来自你的应用程序,而是来自共享的GAE的memcached内存池。您的应用程序的所有实例都“看到”相同的内存缓存。

您在内存中使用的内容对您的应用程序内存使用情况不算

然而,memcache的内容可以在任何时候被删除,而不会发出通知。所以真的没有理由(除了可以放入memcache的对象大小的上限之外)没有缓存所有内容,只要你可以回退到数据存储区,如果它在你要求的时候不在缓存中。