Кеширование с гуавой
Какие классы гуавы подходят для поточно-ориентированного кэширования? Я использую составной ключ, который создается на лету, поэтому softKeys() не имеет смысла, верно? Я видел где-то ConcurentLinkedHashMap, это путь? Это уже в недавнем выпуске? Извините за хаотичный способ просить...
Обновить
Этот вопрос довольно старый, и просмотр его ответов может быть пустой тратой времени. С тех пор как CacheBuilder
который путь.
3 ответа
Звучит как ты хочешь MapMaker.makeComputingMap
, но вы упоминаете softKeys
поэтому я предполагаю, что вы уже знакомы с этим классом.
Вы правы насчет softKeys
- он не будет работать, если вы создаете ключи на лету, потому что softKeys
заставляет карту использовать ==
вместо equals
для сравнения ключей. Но вы должны быть в порядке с softValues
а также expiration
До тех пор, пока не возникнет побочный эффект от воссоздания выселенной записи.
Новая библиотека Guava с версией 10.0 представляет Cache
интерфейс, который разработан специально для кэширования.
Идет с CacheBuilder
, который похож на MapMaker
и все методы кеширования MapMaker
будут удалены в выпуске 11.
Пример из документации:
Cache<Key, Graph> graphs = CacheBuilder.newBuilder()
.concurrencyLevel(4)
.weakKeys()
.maximumSize(10000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});
MapMaker.maximumSize()
является долгосрочной заменой ConcurrentLinkedHashMap
, CLHM остается тестовой площадкой для улучшенных алгоритмов для последующего портирования, если существует консенсус сообщества. Я ожидаю, что v2.0 будет последним выпуском после переноса этих улучшений на MapMaker
, хоть. Проект будет оставаться живым по мере необходимости, поскольку у него хорошая база пользователей (например, Apache Cassandra). Я очень счастлив, что Гуава включил это.