前几天我发了一个关于事务和幂等性的问题,但没有得到太多回应。
Google App Engine:(Python)数据存储事务和幂等性
今天我意识到事务是数据存储的一个特性,但大多数时候我都是从 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
这行得通吗?
事务代码是否足够聪明,可以知道防止整个块同时运行,还是仅在事务函数中从第一个数据存储操作到最后一个数据存储操作的锁定?
是否有可能两个请求从内存缓存中提取相同的数据,完成工作,但在将数据放回数据存储区时不会发生冲突,导致后一个请求踩到第一个请求的更改?