【发布时间】:2012-11-29 09:21:37
【问题描述】:
我正在使用事务将多个实体写入数据存储。我也想将这些实体保留在 MemCache 中。如何确保 MemCache 中的实体副本实际上等于 Datastore 中的副本?
例如我能做到:
tx.begin()
datastore.put(entity)
if (memcache.putIfUntoched(key, entity))
tx.commit()
但是,如果事务失败,实体可能会在 MemCache 中结束,而不是在 Datastore 中。另一方面,如果我这样做:
tx.begin()
datastore.put(entity)
tx.commit()
memcache.putIfUntoched(key, entity))
那么数据存储事务可能会成功,但 MemCache 更新可能会失败。如何确保一致性?
【问题讨论】:
-
我想,如果你使用 NDB,NDB 会小心的。
-
我的应用是 Java :-( NDB 是怎么做的?
-
对不起,我不明白你使用 Java。 NDB 是大师的一个项目:Guido van Rossum。顺便一提。在 Python 中,我从未见过 memcache 更新失败。 Memcache 集没有任何异常或返回码。但是您可以检测功能 API 的问题。我发现了这个:osdir.com/ml/GoogleAppEngine/2009-10/msg00437.html
-
memcache.put() 很可能永远不会失败,但 putIfUntouched() 在并发更新时会失败。
标签: google-app-engine google-cloud-datastore