Apollo Client v3 Удалить записи из кеша по истечении заданного периода времени - PullRequest
0 голосов
/ 21 июня 2020

Мне интересно, есть ли способ истечь кэшированные элементы через определенный период времени, например, 24 часа.

Я знаю, что Apollo Client v3 предоставляет такие методы, как cache.evict и cache.gc, которые хорошее начало, и я уже использую; однако мне нужен способ удалить элементы кеша по истечении заданного периода времени.

В данный момент я добавляю поле TimeToLive к каждому объекту в моей схеме Apollo, и когда серверная часть возвращает объект, поле заполняется текущим временем + 24 часа (т.е. время в 24-часовом формате). Затем, когда я запрашиваю данные во внешнем интерфейсе, я проверяю, находится ли поле TimeToLive возвращенных данных в будущем (если нет, это означает, что данные были определенно получены из кеша, и в этом случае я вызываю refetch функция, которая заставляет запрос получать данные с сервера. Однако это не кажется лучшим способом сделать что-то, в основном потому, что мне приходится перебирать каждый результат в возвращаемых данных, проверять привязку, если какой-либо из возвращенных объекты устарели; и если да, то все обновляется.

Другое решение, о котором я подумал, заключалось в использовании чего-то вроде React Native Queue и фоновой задачи, которая периодически проверяет кеш и удаленные элементы срок действия истек. Но опять же, я не полностью уверен в этом решении.

Для небольшого контекста: я создаю приложение для кулинарии / рецептов, и рецепты / сообщения кэшируются на устройстве; однако меня беспокоит то, что пользователь может удалить сообщение, но все остальные, у кого это сообщение кэшировано по-прежнему смогут его видеть, и, следовательно, по истечении срока действия кэшированного элемента, по крайней мере, они смогут видеть только несколько часов, прежде чем он будет удален. Однако они могли бы быть лучшим способом сделать это все вместе, то есть иметь серьезные контакты с клиентами с кешированным элементом (хотя на момент написания этой статьи я не мог придумать никаких решений с низким подъемом)

1 Ответ

0 голосов
/ 21 августа 2020

apollo-invalidation-policies заменяет Apollo-client InMemoryCache на InvalidationPolicyCache, а внутри typePolicies вы можете указать поле timeToLive. Если доступ к объекту превышает их TTL, они удаляются, и данные не возвращаются.

...