2012-10-04 32 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 = ...;它不是完全由查询过程使用。)