我很难找到一个好的教程或最佳实践文档,以便在app引擎中使用memcache。
我对文档中提供的级别感到非常满意。通过ID获取一个对象,首先检查memcache,但我不清楚如下:
如果缓存查询,是否有可接受的方法来确保在更新存储在该查询中的对象时清除/更新缓存。
使用ReferenceProperties有什么影响?如果缓存一个带有Bar引用的Foo对象。我的foo.bar也在memcache中,如果它从我的应用程序的其他部分更新,则需要清除。
我不希望这里得到答案(除非你感觉特别慷慨!),但我非常感激地收到了我能读到的内容的指示。
答案 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交互。