Java 在googleappengine中使用memcache

Java 在googleappengine中使用memcache,java,google-app-engine,memcached,Java,Google App Engine,Memcached,我已经使用GAE创建了一个应用程序。我期待着每天10万的请求。目前,对于每个请求,应用程序需要在执行所需任务之前查找4个表和8个差异列 这4个表是我的主表,有5k、500、200和30条记录。它低于1MB(限制) 现在我想把我的主记录放在memcache中,以便更快地访问并减少RPC调用。当任何用户更新master时,我将替换memcache对象 我需要社区的建议 可以更改当前的设计吗 如何将4个主表数据放入memcache 下面是应用程序当前的工作方式 100个用户访问相同的应用程序页面 它们

我已经使用GAE创建了一个应用程序。我期待着每天10万的请求。目前,对于每个请求,应用程序需要在执行所需任务之前查找4个表和8个差异列

这4个表是我的主表,有5k、500、200和30条记录。它低于1MB(限制)

现在我想把我的主记录放在memcache中,以便更快地访问并减少RPC调用。当任何用户更新master时,我将替换memcache对象

我需要社区的建议

可以更改当前的设计吗

如何将4个主表数据放入memcache

下面是应用程序当前的工作方式

  • 100个用户访问相同的应用程序页面
  • 它们提供了一个唯一的标识令牌和另外3个参数(比如p1、p2和p3)
  • 我的servlet接收请求
  • 应用程序通过令牌获取用户表,并检查启用状态
  • 应用程序获取另一个表(比如
    department
    )并检查p1是否存在。如果存在,请检查启用状态
  • 如果以上返回true,则根据参数p2查询服务表,以检查是否为此用户启用了此服务,并检查服务结束日期
  • 根据p3长度检查另一个表的可用性

  • 您不应该考虑将表插入memcache。相反,使用“乐观缓存”策略:任何时候需要执行要缓存的操作时,首先尝试在memcache中查找,如果失败,则从数据存储中获取,然后存储在memcache中。下面是一个例子:

    def cached_get(key):
      entity = memcache.get(str(key))
      if not entity:
        entity = db.get(key)
        memcache.set(str(key), entity)
      return entity
    

    不过,请注意,缓存单个实体的回报率相当低——数据存储在抓取时相当快。缓存查询结果或呈现的页面将大大提高速度。

    您应该仅将memcache用于频繁的数据操作。是的,您需要提供更多信息,然后我们才能提供更多帮助。如果我们对数据了解得更多,可能会有一些非常好的优化,我的问题仍然存在。我想重新减少RPC。如果你希望任何人能够提供帮助,你必须更具体地说明你的问题是什么,以及我的答案出了什么问题。Manjoor:减少RPC是个好主意,但你必须从某处获取数据。此外,并非所有RPC的成本都相同—memcache获取的开销通常只有几毫秒。数据存储RPC延迟通常要高得多(~100x)。