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

Hen*_*ves 9 caching react-apollo apollo-client apollo-cache-inmemory

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

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

我现在要做的就是向 Apollo 模式中的每个对象添加一个 TimeToLive 字段,当后端返回一个对象时,该字段将填充当前时间 + 24 小时(即 24 小时内的时间)。然后,当我在前端查询数据时,我检查返回数据的 TimeToLive 字段是否是将来的(如果不是,则意味着数据肯定是从缓存中检索的,在这种情况下我调用该函数refetch,这强制查询从服务器获取数据。但是,这似乎不是最好的方法,主要是因为我必须迭代返回数据中的每个结果并检查返回的对象是否已过期;如果是这样,所有内容都会重新获取。

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

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

Hen*_*ves 7

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