上下文:使用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
}
非常感谢
答案 0 :(得分:3)
memcache使用的“ram”不是来自你的应用程序,而是来自共享的GAE的memcached内存池。您的应用程序的所有实例都“看到”相同的内存缓存。
您在内存中使用的内容对您的应用程序内存使用情况不算。
然而,memcache的内容可以在任何时候被删除,而不会发出通知。所以真的没有理由(除了可以放入memcache的对象大小的上限之外)没有缓存所有内容,只要你可以回退到数据存储区,如果它在你要求的时候不在缓存中。