Кэширование с помощью 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). Я очень доволен, что Гува включил его.