Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 应用程序引擎和memcache的白痴指南_Python_Google App Engine_Memcached - Fatal编程技术网

Python 应用程序引擎和memcache的白痴指南

Python 应用程序引擎和memcache的白痴指南,python,google-app-engine,memcached,Python,Google App Engine,Memcached,我正在努力寻找一个关于在AppEngine中使用memcache的好教程或最佳实践文档 我对文档中的级别表示非常满意。通过ID获取对象,首先检查memcache,但我不清楚以下内容: 如果缓存查询,是否有可接受的方法确保在更新该查询中存储的对象时清除/更新缓存 使用ReferenceProperty的效果如何?如果缓存对象是具有条形引用的Foo对象。我的foo.bar也在memcache中,如果它从我的应用程序的其他部分更新,则需要清除它 我不希望在这里得到答案(除非你觉得自己特别慷慨!),但我

我正在努力寻找一个关于在AppEngine中使用memcache的好教程或最佳实践文档

我对文档中的级别表示非常满意。通过ID获取对象,首先检查memcache,但我不清楚以下内容:

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

使用ReferenceProperty的效果如何?如果缓存对象是具有条形引用的Foo对象。我的foo.bar也在memcache中,如果它从我的应用程序的其他部分更新,则需要清除它

我不希望在这里得到答案(除非你觉得自己特别慷慨!),但我会非常感激地收到我能读到的东西

如果缓存查询,是否存在 确保 缓存被清除/更新时 存储在该查询中的对象是 更新


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

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

一种简单的方法是搜索任何datastore 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可显著降低应用程序引擎成本。关于我如何优化应用程序引擎