在谷歌应用引擎中使用memcache

时间:2010-07-21 06:58:33

标签: java google-app-engine memcached

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

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

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

我需要社区建议。

改变当前的设计是否可以?

如何在memcache中放置4个主表数据?

以下是应用程序当前的工作原理

  1. 100个用户访问同一个应用程序页面。
  2. 它们提供了一个唯一的识别标记和另外3个参数(比方说p1,p2和p3)。
  3. 我的servlet收到请求。
  4. 应用程序按令牌提取用户表,并检查启用状态。
  5. 应用程序获取另一个表(比如department)并检查p1是否存在。如果存在则检查启用状态。
  6. 如果以上返回true,则根据参数p2查询服务表,以检查此用户是否启用此服务,并检查Service EndDate。
  7. 根据p3长度检查另一个表的可用性。

1 个答案:

答案 0 :(得分:6)

你不应该考虑将表插入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

但请注意,缓存单个实体的回报相当低 - 数据存储区在执行提取时速度相当快。缓存查询结果或渲染页面可以更快地提高速度。