如何使 apollo android 缓存失效?
How to invalidate apollo android cache?
这是我用于缓存的 apollo 客户端代码
val apolloSqlHelper = ApolloSqlHelper.create(context,"my_app")
val sqlNormalizedCacheFactory = SqlNormalizedCacheFactory(apolloSqlHelper)
val cacheKeyResolver = object: CacheKeyResolver(){
override fun fromFieldRecordSet(
field: ResponseField,
recordSet: MutableMap<String, Any>
): CacheKey {
return if (recordSet["__typename"] == "Repository") {
CacheKey.from(recordSet["id"] as String)
} else {
CacheKey.NO_KEY
}
}
override fun fromFieldArguments(
field: ResponseField,
variables: Operation.Variables
): CacheKey {
return CacheKey.NO_KEY
}
}
ApolloClient.builder().serverUrl(baseUrl)
.normalizedCache(sqlNormalizedCacheFactory,cacheKeyResolver)
.okHttpClient(okHttpClient).build()
我正在做一个查询,之后 apollo 缓存了我的结果,但是当更多的数据被添加到查询中时,我不明白如何根据结果是否改变来使缓存无效。如果没有结果改变从缓存中获取数据或获取新数据并更新缓存
我不需要手动使缓存失效。 Apollo Android 帮我搞定
这段代码对我有用
apolloClient.query(MyQuery()).responseFetcher(ApolloResponseFetchers.NETWORK_FIRST)
ApolloResponseFetchers
还提供各种选项,例如 CACHE_FIRST
、CACHE_ONLY
等
第一个选项是在您的查询中使用特定的 ResponseFetcher
来调整您的缓存策略:
val query = someQuery.toBuilder()
.responseFetcher(ApolloResponseFetchers.NETWORK_ONLY)
.build()
apolloClient.query(query)
但是,如果您需要使某些特定缓存键的缓存无效,您可以继续使用 ApolloStore。
apolloClient.apolloStore.remove(yourCacheKey)
这是我用于缓存的 apollo 客户端代码
val apolloSqlHelper = ApolloSqlHelper.create(context,"my_app")
val sqlNormalizedCacheFactory = SqlNormalizedCacheFactory(apolloSqlHelper)
val cacheKeyResolver = object: CacheKeyResolver(){
override fun fromFieldRecordSet(
field: ResponseField,
recordSet: MutableMap<String, Any>
): CacheKey {
return if (recordSet["__typename"] == "Repository") {
CacheKey.from(recordSet["id"] as String)
} else {
CacheKey.NO_KEY
}
}
override fun fromFieldArguments(
field: ResponseField,
variables: Operation.Variables
): CacheKey {
return CacheKey.NO_KEY
}
}
ApolloClient.builder().serverUrl(baseUrl)
.normalizedCache(sqlNormalizedCacheFactory,cacheKeyResolver)
.okHttpClient(okHttpClient).build()
我正在做一个查询,之后 apollo 缓存了我的结果,但是当更多的数据被添加到查询中时,我不明白如何根据结果是否改变来使缓存无效。如果没有结果改变从缓存中获取数据或获取新数据并更新缓存
我不需要手动使缓存失效。 Apollo Android 帮我搞定
这段代码对我有用
apolloClient.query(MyQuery()).responseFetcher(ApolloResponseFetchers.NETWORK_FIRST)
ApolloResponseFetchers
还提供各种选项,例如 CACHE_FIRST
、CACHE_ONLY
等
第一个选项是在您的查询中使用特定的 ResponseFetcher
来调整您的缓存策略:
val query = someQuery.toBuilder()
.responseFetcher(ApolloResponseFetchers.NETWORK_ONLY)
.build()
apolloClient.query(query)
但是,如果您需要使某些特定缓存键的缓存无效,您可以继续使用 ApolloStore。
apolloClient.apolloStore.remove(yourCacheKey)