【问题标题】:Using memcache in google app engine在谷歌应用引擎中使用内存缓存
【发布时间】:2010-07-21 06:58:33
【问题描述】:

我使用 GAE 创建了一个应用程序。我预计每天有 10 万个请求。目前对于每个请求应用程序在执行所需任务之前需要查找 4 个表和 8 个 diff 列。

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

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

我需要社区对此提出建议。

可以更改当前设计吗?

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

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

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

【问题讨论】:

  • 你应该只对频繁的数据操作使用memcache。
  • 是的,您需要提供更多信息,我们才能提供更多帮助。如果我们对数据有更多了解,很可能可以进行一些非常好的优化。

标签: java google-app-engine memcached


【解决方案1】:

您不应该考虑将表插入内存缓存。相反,使用“乐观缓存”策略:任何时候您需要执行想要缓存的操作,首先尝试在 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

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

【讨论】:

  • 我的问题仍然存在。我想减少 RPC。
  • 如果您希望任何人能够提供帮助,您必须更具体地说明您的问题是什么,以及我的回答有什么问题。
  • Manjoor:减少 RPC 是个好主意,但您必须从某个地方获取数据。此外,并非所有 RPC 的成本都相同 - memcache 获取通常应该只有几毫秒的开销。数据存储区 RPC 延迟通常要高一些(约 100 倍)。
猜你喜欢
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多