我正在转换到NDB,我正在使用两个模型集:一个基于普通的google.appengine.ext.db
,一个基于新的花式google.appengine.ext.ndb
。
我想将基于NDB的模型用于只读并保留内置于NDB中的缓存,同时能够使用旧模型存储更改(并表示需要在需要时将缓存更新到NDB)。
如何在NDB中刷新/清除特定模型实例的缓存,同时根据旧db
保存模型中的更改?
答案 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秒