Управление записями в Google Guava Cache - PullRequest
1 голос
/ 25 июня 2019

Мне нужно разработать микросервис Spring Boot со встроенной базой данных ( Derby ) с кешем ( Кеш Guava ).

Размер записей различенв каждом клиенте.

  • Если я не установлю maximumSize, что произойдет?размер будет расти постоянно?это повлияет на размер?память?
  • Если я запланирую задание, которое преформует cleanUp (для каждого интервала), когда записи будут удалены из кеша?и как это произойдет, если я только refreshAfterWrite?
  • Допустим, я установил refreshAfterWrite без какого-либо вызова cleanUp, истекшие записи будут удалены из кэша?(то есть я позвоню на cache.size() и посмотрю, что оно уменьшилось).

Спасибо

1 Ответ

1 голос
/ 25 июня 2019

Это много вопросов.Все они объяснены на вики-странице Caches Explained Гуавы.

Если я не установлю maximumSize, что произойдет?размер будет постоянно расти?

Что произойдет, если записи будут освобождены при выполнении других условий или при отсутствии доступной памяти.Так что да, размер будет расти до тех пор, пока эти условия не будут выполнены.(Раздел «Выселение по размеру» )

это повлияет на размер?память?

maximumSize(long) указывает конкретный размер объекта.По умолчанию это количество элементов, которые присутствуют в кеше.Но если вы используете weigher(Weigher), вы можете сказать, что конкретный элемент стоит больше или меньше, поэтому приближается к фактическому использованию памяти.Но тогда вы должны написать свой Weigher.(Раздел «Выселение на основе размера» )

Если я запланирую задание, которое преформует cleanUp (для каждого интервала), когда записи будут удалены из кэша?

Записи будут удалены при вызове метода cleanUp().(Раздел «Когда происходит очистка?» )

и как это произойдет, если я только refreshAfterWrite?

Если вывызовите cleanUp() с кешем refreshAfterWrite, запись, к которой вы хотите получить доступ, должна быть загружена снова, независимо от того, был ли активирован refreshAfterWrite или нет.

Допустим, я установил refreshAfterWrite без какого-либо вызова cleanUp, истекшие записи будут удалены из кэша?

Нет, refreshAfterWrite не совпадает с expireAfterWrite.Запись будет иметь право на обновление , но не будет удалена .Если вы использовали expireAfterWrite, то срок действия записи истечет и будет удален .

(т.е. я вызову cache.size () и посмотрю, что это былоуменьшилось).

Это не так, как это работает.Кеш не является гарантированным работником.Это не похоже на коллекцию.Возможно, что некоторые записи не учитываются при расчете размера или что некоторые записи по-прежнему считаются частью размера, но еще не удалены эффективно.Это явно , записанное в Javadoc для метода size() :

size

long size()

Возвращает приблизительное количество записей в этом кэше.

По сути, вы действительно должны прочитать всю документацию по вики-странице Caches Explayined wiki .Вся фактическая информация там, в очень наглядном виде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...