如何确保GAE上的MemCache和数据存储之间的一致性?

时间:2012-11-29 09:21:37

标签: google-app-engine google-cloud-datastore

我正在使用事务向数据存储区写入多个entites。我也希望将这些实体保存在MemCache中。如何确保MemCache中的实体副本实际上等于数据存储区中的副本?

E.g。我能做到:

tx.begin()
datastore.put(entity)
if (memcache.putIfUntoched(key, entity))
  tx.commit()

但是如果事务失败,实体可能会在MemCache中结束,但不会在数据存储区中结束。另一方面,如果我这样做:

tx.begin()
datastore.put(entity)
tx.commit()
memcache.putIfUntoched(key, entity))

然后数据存储区事务可能会成功,但MemCache更新可能会失败。我如何确保一致性?

1 个答案:

答案 0 :(得分:2)

根据我的经验,如果您同时写入数据库和缓存,可能没那么有用。通常,将DB事务与其他事物(例如文件系统)混合是很难做到的。

我建议您更改程序逻辑,以便

  1. 创建新记录时,只写入DB
  2. 更新现有记录时,请写入数据库,并使缓存中的相应插槽无效
  3. 当您要查找记录时,只需检查缓存即可。如果不存在,请从DB加载并填写缓存