Java-кеш LRU: LinkedHashMap с меткой времени?

Мне нужно реализовать кеш LRU со сроком действия 600 секунд на Java. Я поискал и нашел встроенный класс LinkedHashMap. Он может удалять самые старые элементы, когда размер превышает предел, но у него нет срока действия для элементов.

Что я могу придумать, так это связать метку времени при помещении элемента в кеш. При получении элемента проверьте его отметку времени; если метка времени старше 600 с, то удаляет элемент из кеша и возвращает «не найден».

Есть идеи получше? Какие-нибудь встроенные решения или лучшие практики? Я бы не хотел изобретать велосипед заново.


person Wang Tuma    schedule 29.12.2019    source источник
comment
Прочтите документ docs.oracle.com/javase/8 /docs/api/java/util/LinkedHashMap.html о removeEldestEntry. Также stackoverflow.com/questions/ 1936462 /   -  person TJA    schedule 29.12.2019


Ответы (2)


Как насчет того, чтобы просто использовать кеш Guava.

Он поддерживает все эти,

Конструктор экземпляров LoadingCache и Cache, имеющий любую комбинацию следующих функций:

  • автоматическая загрузка записей в кеш
  • выселение, которое использовалось не так давно, при превышении максимального размера
  • основанный на времени срок действия записей, измеренный с момента последнего доступа или последней записи
  • ключи автоматически заключаются в слабые ссылки
  • значения автоматически заключаются в слабые или мягкие ссылки
  • уведомление о выселенных (или иным образом удаленных) записях
  • накопление статистики доступа к кешу
person Adwait Kumar    schedule 29.12.2019

Я предлагаю не реализовывать его самостоятельно, а взглянуть на уже доступные реализации:

  1. Guava Cache - неплохой вариант (он уже рекомендован, поэтому я не буду добавлять сюда ссылку)
  2. Caffeine Очень хорошая реализация кеширования.

Если вы хотите узнать разницу между ними, прочтите эту ветку в SO

Я верю, что и то, и другое предоставит вам доступ к функциям. Кроме того, если вы используете такие фреймворки, как Spring, он интегрирован с ними (в более поздних версиях используется кофеин, в более старых версиях используется гуава):

Spring Cache

person Mark Bramnik    schedule 29.12.2019