加入我们,于10月8日至10日在纽约市,学习有关GraphQL联邦和API平台工程的最新技巧、趋势和新闻。加入我们参加2024年的NYC GraphQL峰会
文档
免费开始
您正在查看该软件旧版本的文档。 切换到最新稳定版本。

HTTP缓存


本页重点介绍HTTP缓存。如果您想去重存储对象和/或通知界面数据发生变化,请参阅标准化缓存

ℹ️ HTTP缓存仅在JVM上可用。

设置

要启用HTTP缓存支持,将依赖项添加到项目的build.gradle文件中:

build.gradle[.kts]
dependencies {
implementation("com.apollographql.apollo3:apollo-http-cache:3.8.5")
}

如果您针对的目标Android API级别 < 26,则需要启用核心库集解以支持java.time API:

android {
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled = true
}
}

然后配置您的HTTP缓存

apolloClient = ApolloClient.Builder()
.httpCache(
// Use a dedicated directory for the cache
directory = File(pathToCacheDirectory),
// Configure a max size of 100MB
maxSize = 100 * 1024 * 1024
)
.build()

用法

HTTP缓存是一个具有可配置最大大小的最不常使用(LRU)缓存。

一旦完成缓存设置,所有查询将默认使用缓存。默认情况下,查询将首先在缓存中尝试找到结果,如果没有,则访问网络。这是HttpFetchPolicy.CacheFirst。您可以使用httpFetchPolicy(HttpFetchPolicy)自定义此行为:

val response = apolloClient.query(query)
// Don't use the cache
.httpFetchPolicy(HttpFetchPolicy.NetworkOnly)
// Or only use the cache
.httpFetchPolicy(HttpFetchPolicy.CacheOnly)
// Finally, execute your query
.execute()

如果已缓存,将使用缓存的response.data返回。如果没有,则会抛出HttpCacheMissException异常。

您还可以设置全局或特定查询的过期时间。一旦超过过期时间,条目将自动从缓存中删除

// Globally
apolloClient = ApolloClient.Builder()
.httpCache(/*...*/)
// Expire after 1 hour
.httpExpireTimeout(60 * 60 * 1000)
.build()
// On a specific query
val response = apolloClient.query(query)
// Expire after 1 hour
.httpExpireTimeout(60 * 60 * 1000)
.execute()

如果特定查询不能缓存,您可以使用httpDoNotStore()

val response = apolloClient.query(query)
// Don't cache this query
.httpDoNotStore(httpDoNotStore = true)
.execute()

清除缓存

调用apolloClient.httpCache.clearAll() 来清除所有条目的缓存。

上一页
ApolloStore
下一页
故障排除
评估文章评估在GitHub上编辑编辑论坛Discord

版权所有2024Apollo Graph Inc.,以Apollo GraphQL的名义。

隐私政策

公司