2012-10-04 70 views
2

我只想在我的一個查詢中禁用上下文緩存。我想我能做到這一點是這樣的:NDB查詢獲取()和ContextOptions

MyModel.query(ancestor=user.key).fetch(100, options=ContextOptions(use_cache=False, use_memcache=False)) 

MyModel.query(ancestor=user.key).fetch(100, config=ContextOptions(use_cache=False, use_memcache=False)) 

但它似乎並沒有爲我工作。所以我的問題是如何禁用緩存和內存緩存查詢使用

PS:

對於get()方法它完美的作品:

MyModel.query(ancestor=user.key).get(use_cache=False, use_memcache=False) 

謝謝!

回答

2

緩存僅支持get()。從docs

查詢不查找任何緩存中的值。但是,如果高速緩存策略如此說明(但 永遠不存在Memcache),則查詢結果是 回寫到上下文高速緩存中。

如果您遇到一些實體,這似乎被緩存的問題,你可能要改變上下文高速緩存策略:

ctx.set_cache_policy(lambda key: False) 

set_cache_policy的參數必須是函數取一個參數(鍵)並且如果密鑰必須被緩存,則返回布爾值。在這裏它總是返回False,所以沒有實體會被緩存。

4

你應該只能夠寫

MyModel.query(........).fetch(limit, use_cache=False) 

如果沒有你正在尋找一些不同的錯誤預期的效果。應該不需要爲此設置全局緩存策略。 (確實,在過去的某個時間點,fetch()不支持use_cache = ...;但是這個問題早已得到解決,而且,不需要打擾use_memcache = ...;它不是完全由查詢過程使用。)