Кеширование с гуавой

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

Другие вопросы по тегам