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

Jan*_*zny 4 python google-app-engine google-cloud-datastore

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

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

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

Gui*_*sum 12

我建议只为那些重复的模型类禁用缓存; 比抱歉更安全.这很容易通过推杆完成

   _use_memcache = False
   _use_cache = False
Run Code Online (Sandbox Code Playgroud)

在每个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)
Run Code Online (Sandbox Code Playgroud)

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