5

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

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

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

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

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

4

1 回答 1

5

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

于 2020-08-20T22:19:00.867 回答