2

我只想在我的一个查询中禁用上下文缓存。我以为我可以这样做:

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

但这似乎对我不起作用。所以我的问题是如何使用fetch禁用缓存和 memcache 查询?

PS:

对于 get() 它完美地工作:

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

谢谢!

4

2 回答 2

4

你应该能写

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

如果那没有达到预期的效果,那么您正在查看一些不同的错误。不需要为此设置全局缓存策略。

(的确,在过去的某个时候, fetch() 不支持 use_cache=...; 但这早已得到修复。此外,没有必要为 use_memcache=... 烦恼;它不被查询使用过程。)

于 2012-10-05T16:51:00.240 回答
2

仅 get() 支持缓存。从文档

查询不会在任何缓存中查找值。但是,如果缓存策略如此,查询结果将被写回上下文缓存(但永远不会写回 Memcache)。

如果您遇到某些似乎被缓存的实体的问题,您可能必须更改上下文缓存策略:

ctx.set_cache_policy(lambda key: False)

set_cache_policy 的参数必须是带有一个参数(键)的函数,如果必须缓存该键,则返回布尔值。这里它总是返回 False,所以不会缓存任何实体。

于 2012-10-04T16:12:09.360 回答