应用引擎会自动缓存频繁查询吗?

Posted

技术标签:

【中文标题】应用引擎会自动缓存频繁查询吗?【英文标题】:Does app engine automatically cache frequent queries? 【发布时间】:2012-03-13 18:06:00 【问题描述】:

我似乎记得在某处读到谷歌应用引擎会自动将非常频繁查询的结果缓存到内存中,以便更快地检索它们。

这对吗?

如果是这样,对这些查询的数据存储读取是否仍然收费?

【问题讨论】:

【参考方案1】:

如果您使用 Python 和新的 ndb API,它确实会自动缓存实体,因此如果您通过键获取实体,它将被缓存:

http://code.google.com/appengine/docs/python/ndb/cache.html

正如 cmets 所说,查询不会被缓存。 缓存的请求不会到达数据存储区,因此您可以节省读取数据。

如果您使用 Java 或其他 API 来访问数据存储区,那么不,没有缓存。

已编辑修正了我关于查询被缓存的错误。

【讨论】:

实际上,NDB 缓存实体,而不是查询:“查询不会在任何缓存中查找值。但是,如果缓存策略如此,查询结果将写回上下文缓存(但永远不要使用 Memcache)。” 尼克怎么说。 Rick Mangi 的回答是正确的。您可以通过使用 keys_only 查询并将结果传递给 get_multi() 从 NDB 的缓存中获得一些好处;但是请参阅此处的讨论:code.google.com/p/appengine-ndb-experiment/issues/detail?id=118。【参考方案2】:

我认为应用引擎不会为您缓存任何内容。虽然它可能会在内部缓存一些东西一瞬间,但我认为你不应该依赖它。

我认为,对于从每个查询中读取的每个实体,您将按正常数量的读取操作付费。

【讨论】:

【参考方案3】:

不,它没有。但是,根据您用于访问数据存储的框架,将使用 memcache。你是用java还是python开发?在 java 方面,Objectify 将自动缓存 GET,但不会缓存查询。请记住,python 和 java 中的 get 和 query 在性能和可缓存性方面存在很大差异。

您无需为 memcache 命中的数据存储读取付费。

【讨论】:

以上是关于应用引擎会自动缓存频繁查询吗?的主要内容,如果未能解决你的问题,请参考以下文章

androidsqlite数据库里面的数据系统会自动清除吗

每次我调用 Auth::user() 时,Laravel 都会查询数据库吗?

自动缓存更新在 react apollo 中不起作用

iOS - 保存到库/缓存/会导致错误吗?

mysql 核心内容-上

SQL查询语句的执行