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 APIscoreLibraryDesugaringEnabled = true}}
然后配置您的HTTP缓存
apolloClient = ApolloClient.Builder().httpCache(// Use a dedicated directory for the cachedirectory = File(pathToCacheDirectory),// Configure a max size of 100MBmaxSize = 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
异常。
您还可以设置全局或特定查询的过期时间。一旦超过过期时间,条目将自动从缓存中删除
// GloballyapolloClient = ApolloClient.Builder().httpCache(/*...*/)// Expire after 1 hour.httpExpireTimeout(60 * 60 * 1000).build()// On a specific queryval 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()
来清除所有条目的缓存。