簡體   English   中英

如何清除 NDB 中特定 model 的緩存

[英]How to clear cache for specific model in NDB

我正在過渡到 NDB,我正在使用兩個 model 集:一個基於普通的舊google.appengine.ext.db ,另一個基於新的google.appengine.ext.ndb

我想將基於 NDB 的模型用於只讀並保留 NDB 中內置的緩存,同時能夠使用舊模型存儲更改(並在需要時向 NDB 發出需要更新緩存的信號)。

如何在保存基於舊db的 model 中的更改時刷新/清除 NDB 中特定 model 實例的緩存?

我建議只禁用重復的那些 model 類的緩存; 安全總比后悔好。 這很容易通過把

   _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)

這將從內存緩存和上下文緩存中刪除密鑰,但不會將其從數據存儲中刪除。 然而,當您嘗試使用它的 NDB 鍵讀回它時(或者甚至當它作為查詢結果返回時),它似乎會被刪除,直到當前 HTTP 請求處理程序完成,並且它不會使用內存緩存大約 30 秒.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM