例子:
- 进程 A - 从 memcache 中获取最新版本的实体
- 进程 B - 从 memcache 获取实体的最新版本
- 进程 A - 对 (1) 中检索到的实体进行一些更新,然后
puts
在 db/memcache 中进行更新 - 进程 B - 对 (2) 中检索到的实体进行一些更新,然后
puts
在 db/memcache 中进行更新
更新 3. 丢失。
可以使用什么策略/模式来防止这种情况?
例子:
puts
在 db/memcache 中进行更新puts
在 db/memcache 中进行更新更新 3. 丢失。
可以使用什么策略/模式来防止这种情况?
您可能想要使用cas
和gets
命令:
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
您应该在事务中进行更新以使其具有原子性。
https://developers.google.com/appengine/docs/python/ndb/transactions