【发布时间】:2013-03-08 05:36:37
【问题描述】:
前几天我发了一个关于事务和幂等性的问题,但没有得到太多回应。
Google App Engine: (Python) Datastore transactions and idempotence
今天我意识到事务是数据存储的一项功能,但大多数时候我都是从 Memcache 中提取数据,做大量工作,然后保存回 Memcache 和数据存储。
如果数据在内存缓存中丢失,我只会从数据存储中获取数据。
在事务中放置一个函数会阻止另一个请求从内存缓存中提取相同的数据吗?
示例通常如下所示。
Begin Transaction
Get Data from Datastore
Do Work on data
Put data back in Datastore
我的代码大部分时间都这样
Begin Transaction
Get data from Memcache
if not data:
Get data from Datastore
Do work on data
Put to Memcache
Put to Datastore
这行得通吗?
事务代码是否足够聪明,可以知道防止整个块同时运行,还是仅在事务函数中从第一个数据存储操作到最后一个数据存储操作加锁?
是否有可能两个请求从内存缓存中提取相同的数据,完成工作,但将数据放回数据存储区时没有冲突导致后一个请求踩踏第一个?
【问题讨论】:
-
memcache 没有事务语义。您可能想查看 memcache CAS developers.google.com/appengine/docs/python/memcache/… 。
标签: google-app-engine transactions memcached