加入我们,从10月8日至10日在纽约市参加活动,了解关于GraphQL联盟和API平台工程的最新技巧、趋势和新闻。参加2024年纽约市的GraphQL峰会
文档
免费开始

HTTP缓存


本页面专注于HTTP缓存。如果您想要去重存储对象和/或当数据更改时通知UI,请查看标准化缓存

注意

HTTP缓存仅适用于Android和JVM。

设置

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

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

如果您针对的是 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)
// Try the cache first - if it's a miss, try the network
.httpFetchPolicy(HttpFetchPolicy.CacheFirst)
// Only use the cache
.httpFetchPolicy(HttpFetchPolicy.CacheOnly)
// Try the network first - if there's an error, try the cache
.httpFetchPolicy(HttpFetchPolicy.NetworkFirst)
// Don't use the cache
.httpFetchPolicy(HttpFetchPolicy.NetworkOnly)
// 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。

隐私政策

公司