白痴指导app引擎和memcache

时间:2010-03-25 01:20:10

标签: python google-app-engine memcached

我很难找到一个好的教程或最佳实践文档,以便在app引擎中使用memcache。

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

如果缓存查询,是否有可接受的方法来确保在更新存储在该查询中的对象时清除/更新缓存。

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

我不希望这里得到答案(除非你感觉特别慷慨!),但我非常感激地收到了我能读到的内容的指示。

3 个答案:

答案 0 :(得分:3)

  

如果您缓存查询,是否有   接受的确保方法   缓存在清除/更新时   存储在该查询中的对象是   更新。

通常,您使用条件包装读取,以便从主数据库中检索值(如果它不在缓存中)。只需封装您的更新,以便在编写数据时填充缓存。如果您需要尽可能最新的结果 - 如果您不是因为它已经过时而烦恼,那么只需设置一个足够低的到期时间,以便应用程序必须重新请求来自主DB经常就够了。

答案 1 :(得分:2)

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

写入数据存储后设置memcache:

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

在进行数据存储区查询之前,尝试从memcache获取数据:

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关于我如何优化应用引擎。

答案 2 :(得分:0)

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