之前无法找到此具体问题。在使用预测查询与完整实体查询时,App Engine的NDB如何处理缓存?
例如,如果我先进行预测查询..
MyModel.query().get(projected=['name'])
...然后再进行常规查询...
MyModel.query().get()
......我会得到什么?完整的实体?如果是这样,NDB会自动缓存第一个查询的任何部分吗?或者NDB是否能够很好地区分,所以下次运行预测查询时可能会从缓存中提取它?
答案 0 :(得分:4)
据我所知,查询结果仅缓存在上下文缓存中,但不会从缓存中获取结果以供查询。
key.get()将从缓存中缓存和检索,但不会从缓存中检索query.get()。
https://developers.google.com/appengine/docs/python/ndb/cache
来自文档: 查询不会在任何缓存中查找值。但是,如果缓存策略这样说,则查询结果将写回到上下文缓存中(但永远不会发送到Memcache)。
要回答有关您将获得的内容的问题,在两个查询中都会显示结果将从数据存储区中提取,而不是从缓存中提取。
答案 1 :(得分:3)
永远不会缓存投影查询结果。如果按键获得返回投影结果是不对的。所以不用担心。