Ответ 1
Вот пример, который я использовал MapMaker
:
private final ConcurrentMap<Long, Foo> fooCache = new MapMaker()
.softValues()
.makeComputingMap(new Function<Long, Foo>() {
public Foo apply(Long id) {
return getFooFromServer(id);
}
});
public Foo getFoo(Long id) {
return fooCache.get(id);
}
Когда на карте вызывается get(id)
, он либо вернет Foo
, который находится на карте для этого идентификатора, либо будет извлекать его с сервера, кэшировать и возвращать. Я не должен думать об этом, как только он будет создан. Кроме того, поскольку я установил softValues()
, кеш не может заполнить и вызвать проблемы с памятью, так как система может очищать записи от него в ответ на потребности памяти. Если кешированное значение очищается от карты, однако, он может просто попросить сервер для него снова в следующий раз, когда он вам понадобится!
Дело в том, что это один из способов его использования. Возможность использования карты сильными, слабыми или программными клавишами и/или значениями, а также возможностью удаления записей через определенное время, позволяет делать с ней много вещей.