Вот краткий пример того, как я использовал 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()
, кэш не может заполняться и вызывать проблемы с памятью, поскольку система способна очищать записи из него в ответ на потребности в памяти.Если кэшированное значение удаляется с карты, оно может просто запросить его у сервера в следующий раз, когда оно понадобится!
Дело в том, что это только один из способов его использования.Возможность использовать для карты сильные, слабые или программные клавиши и / или значения, а также возможность удалять записи через определенный промежуток времени, позволяет с ней многое сделать.