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

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

18 голосов
/ 19 января 2011

Какие классы Guava подходят для поточно-ориентированного кэширования?Я использую составной ключ, который создается на лету, поэтому softKeys () не имеет смысла, верно?Я видел где-то ConcurentLinkedHashMap, это путь?Это уже в недавнем выпуске?Извините за хаотичный способ запроса ...

Обновление

Этот вопрос довольно старый, и просмотр его ответов может быть пустой тратой времени.С тех пор, как есть CacheBuilder, это путь.

Ответы [ 3 ]

20 голосов
/ 09 ноября 2011

В новой библиотеке 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);
         }
       });
5 голосов
/ 19 января 2011

Звучит так, как вы хотите <a href="http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/MapMaker.html#makeComputingMap%28com.google.common.base.Function%29" rel="noreferrer">MapMaker.makeComputingMap</a>, но вы упомянули softKeys, поэтому я предполагаю, что вы уже знакомы с этим классом.

Вы правы насчет softKeys - это не сработает, если вы составляете ключи на лету, потому что softKeys заставляет карту использовать == вместо equals для сравнения ключей. Но вы должны быть в порядке с softValues и expiration, если нет побочных эффектов от воссоздания выселенной записи.

1 голос
/ 20 января 2011

MapMaker.maximumSize() является долгосрочной заменой ConcurrentLinkedHashMap.CLHM остается тестовой площадкой для улучшенных алгоритмов для последующего портирования, если существует консенсус сообщества.Я ожидаю, что v2.0 будет последним выпуском после переноса этих улучшений на MapMaker.Проект будет оставаться живым по мере необходимости, поскольку у него хорошая база пользователей (например, Apache Cassandra).Я очень рад, что Гуава включил это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...