4

我正在向 NDB 过渡,我正在使用两个模型集:一个基于普通的 oldgoogle.appengine.ext.db和一个基于新的 fancy google.appengine.ext.ndb

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

如何在基于 old 保存模型更改的同时刷新/清除 NDB 中特定模型实例的缓存db

4

1 回答 1

14

我建议您只禁用那些重复的模型类的缓存;安全总比后悔好。这很容易通过把

   _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 秒.

于 2012-04-07T04:10:51.957 回答