Кэширование с помощью Guava
18 maaartinus [2011-01-19 13:13:00]
Какие классы Guava подходят для кэширования с потоком? Я использую скомпонованный ключ, который создается на лету, поэтому softKeys() не имеет смысла, не так ли? Я видел где-то ConcurentLinkedHashMap, это путь? Это уже в недавнем выпуске? Извините за хаотичный способ спросить...
Update
Этот вопрос довольно старый, и, глядя через него, ответы могут быть пустой тратой времени. Поскольку долгое время существует CacheBuilder
, это путь.
java caching guava
3 ответа
5 Решение finnw [2011-01-19 14:17:00]
Похоже, что вы хотите MapMaker.makeComputingMap
, но вы указываете softKeys
, поэтому я предполагаю, что вы уже знакомы с этим классом.
Вы правы в отношении softKeys
- это не сработает, если вы будете составлять клавиши "на лету", потому что softKeys
заставляет карту использовать ==
вместо equals
для сравнения ключей. Но вы должны быть в порядке с softValues
и expiration
, если нет побочного эффекта от воссоздания выведенной записи.
20 KARASZI István [2011-11-09 13:10:00]
Новая библиотека 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);
}
});
1 Ben Manes [2011-01-20 10:12:00]
MapMaker.maximumSize()
является долгосрочной заменой для ConcurrentLinkedHashMap
. CLHM остается тестовым слоем для улучшения алгоритмов для последующего переноса, если есть согласие сообщества. Я ожидаю, что v2.0 станет последней версией после переноса этих улучшений на MapMaker
. Проект будет оставаться живым по мере необходимости, поскольку он имеет хорошую базу пользователей (например, Apache Cassandra). Я очень доволен, что Гува включил его.