Apollo Client默认查询缓存TTL是多少
Apollo Client 内存缓存默认TTL与同步机制说明
默认配置下的Apollo Client InMemoryCache 不存在内置的固定TTL(过期时间),你提到的默认缓存策略为cache-first的判断是完全准确的。作为纯内存实现的缓存,它唯一的自动清空时机是页面刷新、应用上下文被销毁时整个缓存被内存回收,不存在按缓存条目定时过期、固定间隔拉取最新数据的逻辑。
对走默认
cache-first策略的查询,Apollo的判断逻辑非常直接:只要缓存中存储了该查询(匹配查询语句、查询变量)的完整结果,就会直接返回缓存值,不会主动发起网络请求拉取最新数据,不存在“更新后等待固定时长才能同步到客户端”的默认规则。
客户端拿到最新服务端数据的时机完全由具体触发行为决定,没有固定等待周期,常见触发场景包括:
- 主动触发查询重抓:调用查询实例的
refetch()方法、将对应查询的fetchPolicy设置为cache-and-network/network-only、查询关联变量变更触发新网络请求时,服务端返回的新数据会直接写入缓存,所有依赖该数据的组件会立即拿到更新后的值。 - 关联操作自动归一化更新:当其他query、mutation、subscription请求返回的数据包含和缓存中已有实体匹配的标识(即
__typename+id字段组合一致),Apollo会自动把新返回的字段合并到对应缓存实体中,整个过程实时生效,无额外延迟。 - 手动操作缓存:调用
cache.writeQuery、cache.modify、cache.evict等API手动修改、清理缓存时,变更会立即同步到所有订阅对应缓存数据的组件。
如果你需要TTL类的自动过期能力,默认配置不直接提供,需要自行实现:可以通过封装高阶逻辑记录缓存写入时间主动触发重抓、定期调用evict清理指定缓存条目,或是使用带TTL配置的缓存持久化插件实现。
内容的提问来源于stack exchange,提问作者Konstantin Komelin
相关产品推荐
相关产品推荐

