Apollo Client v3 在给定时间段后删除缓存条目

Apollo Client v3 Delete cache entries after given time period

我想知道是否有办法在特定时间段(例如 24 小时)后使缓存的项目过期。

我知道 Apollo Client v3 提供了 cache.evictcache.gc 等方法,这是一个很好的开始,我已经在使用;但是,我想要一种在给定时间段后删除缓存项的方法。

我现在正在做的是向我的 Apollo 模式中的每个对象添加一个 TimeToLive 字段,当后端 returns 一个对象时,该字段填充当前时间 + 24 小时(即时间以 24 小时制表示)。然后当我在前端查询数据时,我检查返回数据的 TimeToLive 字段是否在未来(如果不是,那意味着数据肯定是从缓存中检索的,在这种情况下我调用 refetch 函数,它强制查询从服务器获取数据。然而,这似乎不是做事的最佳方式,主要是因为我必须遍历返回数据中的每个结果并检查是否有任何返回的对象已过期;如果是,将重新获取所有内容。

我想到的另一个解决方案是使用类似 React Native Queue 的东西,并有一个后台任务定期检查缓存和已删除的过期项目。但同样,我并没有完全接受这个解决方案。

这里有一些背景信息:我正在构建一个烹饪/食谱应用程序 - 并且食谱/posts 缓存在设备上;但是,我担心的是用户可以删除 post,但是其他拥有 post 缓存的人仍然能够看到它,因此至少通过使缓存项过期他们只会在它被移除之前能够看到几个小时。然而,它们可能是一起完成这一切的更好方法,即让服务器使用缓存项联系客户端(尽管在撰写本文时我想不出任何低提升解决方案)

apollo-invalidation-policies 将 Apollo-client InMemoryCache 替换为 InvalidationPolicyCache,并且在 typePolicies 中您可以指定一个 timeToLive 字段。如果对象的访问超出其 TTL,它们将被逐出并且不返回任何数据。