如何在NDB中清除特定模型的缓存

时间:2012-04-06 08:55:56

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

我正在转换到NDB,我正在使用两个模型集:一个基于普通的google.appengine.ext.db,一个基于新的花式google.appengine.ext.ndb

我想将基于NDB的模型用于只读并保留内置于NDB中的缓存,同时能够使用旧模型存储更改(并表示需要在需要时将缓存更新到NDB)。

如何在NDB中刷新/清除特定模型实例的缓存,同时根据旧db保存模型中的更改?

1 个答案:

答案 0 :(得分:11)

我建议只为那些重复的模型类禁用缓存;比抱歉更安全。这可以通过

轻松完成
   _use_memcache = False
   _use_cache = False

在每个ndb.Model子类中(即在属性声明之前或之后)。这方面的文件在这里:https://developers.google.com/appengine/docs/python/ndb/cache#policy_functions(寻找到底的表格)。

如果你真的只想在使用旧的db.Model子类编写实体时清除缓存,而不是上面的内容,你可以尝试以下(假设ent是db.Model子类实例):

  ndbkey = ndb.Key.from_old_key(ent.key())
  ndbkey.delete(use_datastore=False)

这将从memcache和上下文缓存中删除密钥,但不会从数据存储中删除它。当您尝试使用其NDB密钥(或者甚至当它作为查询结果返回时)将其读回时,它似乎将被删除,直到当前的HTTP请求处理程序完成,并且它将不会使用memcache大约30秒