我想在我的一个查询中禁用上下文缓存。我以为我可以这样做:
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 禁用查询的缓存和内存缓存?
PS:
对于get(),它完美无缺:
MyModel.query(ancestor=user.key).get(use_cache=False, use_memcache=False)
谢谢!
答案 0 :(得分:4)
你应该能够写
MyModel.query(........).fetch(limit, use_cache=False)
如果没有达到预期的效果,你会看到一些不同的错误。不需要为此目的设置全局缓存策略。
(确实,在过去的某个时刻,fetch()不支持use_cache = ...;但是这个问题早已得到解决。而且,没有必要打扰use_memcache = ...;它没有被使用通过查询过程。)
答案 1 :(得分:2)
仅支持get()的缓存。来自docs:
查询不会在任何缓存中查找值。但是,查询结果是 如果缓存策略这样说,则写回到上下文缓存中(但是 永远不要Memcache)。
如果您遇到某些似乎已缓存的实体的问题,您可能需要更改上下文缓存策略:
ctx.set_cache_policy(lambda key: False)
set_cache_policy的参数必须是一个param(key)的函数,如果必须缓存该键则返回boolean。在这里它总是返回False,因此不会缓存任何实体。