【问题标题】:Idiots guide to app engine and memcache应用引擎和内存缓存的白痴指南
【发布时间】:2011-01-31 12:55:20
【问题描述】:

我正在努力寻找在应用引擎中使用 memcache 的良好教程或最佳实践文档。

我对文档中提供的级别非常满意。通过 ID 获取对象,首先检查 memcache,但我不清楚:

如果您缓存查询,是否有一种公认的方法可以确保在更新存储在该查询中的对象时清除/更新缓存。

使用 ReferenceProperties 有什么影响?如果缓存一个带有 Bar 引用的 Foo 对象。我的 foo.bar 是否也在 memcache 中,如果它从我的应用程序的其他部分更新,是否需要清除它。

我不希望在这里得到答案(除非你觉得特别慷慨!),但我会非常感激地收到指向我可以阅读的东西的指针。

【问题讨论】:

    标签: python google-app-engine memcached


    【解决方案1】:

    如果你缓存一个查询,是否有一个 公认的方法,以确保 缓存被清除/更新时 存储在该查询中的对象是 更新了。

    通常,您使用条件包装您的读取,以从主数据库中检索值(如果它不在缓存中)。每当您写入数据时,只需包装您的更新以填充缓存。也就是说,如果您需要结果尽可能是最新的 - 如果您不担心它已经过时,只需设置一个足够低的到期时间,以便应用程序必须重新请求数据主数据库足够频繁。

    【讨论】:

      【解决方案2】:

      轻松做到这一点的一种方法是搜索任何数据存储 put() 调用并在其后设置 memcache。接下来确保在尝试数据存储区查询之前从 memcache 中获取数据。

      写入数据存储后设置内存缓存:

      data.put()
      memcache.set(user_id, data)
      

      在进行数据存储查询之前尝试从内存缓存中获取数据:

      data = memcache.get(user_id)
      if data is None:
          data = Data.get_by_key_name(user_id)
          memcache.set(user_id, data)
      

      使用 Memcache 可显着降低应用引擎成本。 More details 我是如何优化应用引擎的。

      【讨论】:

        【解决方案3】:

        关于引用属性,假设您有 MainModel 和 RefModel,其引用属性“ref”指向 MainModel 实例。每当您调用 ref_model.ref 时,它都会执行数据存储获取操作并从数据存储中检索对象。它不会以任何方式与 memcache 交互。

        【讨论】:

          猜你喜欢
          • 2012-11-10
          • 1970-01-01
          • 1970-01-01
          • 2013-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多