6

例子:

  1. 进程 A - 从 memcache 中获取最新版本的实体
  2. 进程 B - 从 memcache 获取实体的最新版本
  3. 进程 A - 对 (1) 中检索到的实体进行一些更新,然后puts在 db/memcache 中进行更新
  4. 进程 B - 对 (2) 中检索到的实体进行一些更新,然后puts在 db/memcache 中进行更新

更新 3. 丢失。

可以使用什么策略/模式来防止这种情况?

4

2 回答 2

2

您可能想要使用casgets命令:

https://code.google.com/p/memcached/wiki/NewCommands#cas

EDIT GAE memcache 实际上与 memcached 兼容。以下是 GAE 的参考资料:

https://developers.google.com/appengine/docs/python/memcache/clientclass#Client_cas

最后注:

https://developers.google.com/appengine/docs/python/memcache/clientclass#Memcached_compatibility

于 2013-04-04T08:12:23.687 回答
0

您应该在事务中进行更新以使其具有原子性。

https://developers.google.com/appengine/docs/python/ndb/transactions

于 2013-04-04T08:32:17.407 回答