【问题标题】:NDB query fetch() and ContextOptionsNDB 查询 fetch() 和 ContextOptions
【发布时间】:2012-09-25 11:41:36
【问题描述】:

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

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)

谢谢!

【问题讨论】:

    标签: google-app-engine app-engine-ndb


    【解决方案1】:

    你应该会写

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

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

    (确实,在过去的某个时候,fetch() 不支持 use_cache=...;但这早就被修复了。另外,没有必要打扰 use_memcache=...;它没有被使用完全由查询过程。)

    【讨论】:

      【解决方案2】:

      仅 get() 支持缓存。来自docs

      查询不会在任何缓存中查找值。但是,查询结果是 如果缓存策略这样写,则写回上下文缓存(但是 永远不要使用 Memcache)。

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

      ctx.set_cache_policy(lambda key: False)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-09
        • 1970-01-01
        相关资源
        最近更新 更多