Легкий кэш Объекта Java [закрытый] API

96
задан Eduardo 24 January 2017 в 23:13
поделиться

6 ответов

EHCache очень хорош. Можно создать в кэше памяти. Проверьте их примеры кода для примера создания в кэше памяти. Можно определить макс. размер, и время жизни.

EHCache действительно предлагает некоторые расширенные функции, но если Ваш не заинтересованный использованием их - не делают. Но хорошо знать, что они там, если Ваши требования когда-нибудь изменяются.

Вот в кэше памяти. Созданный в коде, без конфигурационных файлов.

CacheManager cacheManager = CacheManager.getInstance();
int oneDay = 24 * 60 * 60;
Cache memoryOnlyCache = new Cache("name", 200, false, false, oneDay, oneDay);
cacheManager.addCache(memoryOnlyCache);

Создает кэш, который будет содержать 200 элементов и имеет ttl 24 часов.

55
ответ дан Matthew Murdoch 24 November 2019 в 05:40
поделиться

Можно проверить LinkedHashMap для реализации простого кэша без сторонних банок:

    Map <String, Foo> cache = new LinkedHashMap<String, Foo>(MAX_ENTRIES + 1, .75F, true) {

        public boolean removeEldestEntry(Map.Entry<String, Foo> eldest) {
            return size() > MAX_ENTRIES;
        }
    };

тогда можно добраться от кэша как

    Foo foo = cache.get(key);
    if (foo == null && !cache.containsKey(key)) {
        try {
            FooDAO fooDAO = DAOFactory.getFooDAO(conn);
            foo = fooDAO.getFooByKey(key);
            cache.put(key, foo);
        } catch (SQLException sqle) {
            logger.error("[getFoo] SQL Exception when accessing Foo", sqle);
        }
    }

отдых, оставленный как осуществление для читателя:)

8
ответ дан JeeBee 24 November 2019 в 05:40
поделиться

JCS пробуют и верен. Даже при том, что это легко, насколько механизмы кэширования идут, Вы могли бы вырыть в фактический код и подражать тому, к чему они делают с HashMap под покрытиями точно, в чем Вы нуждаетесь и не больше. У Вас, кажется, есть довольно хорошая идея того, что Вы ищете.

5
ответ дан Ichorus 24 November 2019 в 05:40
поделиться

Вы также можете проверить мою маленькую библиотеку кеширования под названием KittyCache по адресу:

https://github.com/treeder/kitty-cache

Есть несколько тестов производительности по сравнению с ehcache.

Он используется в проекте SimpleJPA как кэш второго уровня.

10
ответ дан 24 November 2019 в 05:40
поделиться

В memcached есть клиент для Java. http://www.danga.com/memcached/ Требуется отдельный процесс, который будет кэширующим сервером, но мощная вещь.

3
ответ дан 24 November 2019 в 05:40
поделиться

Мне очень нравится MapMaker , который поставляется с Google Guava ( API )

У JavaDoc довольно аккуратный пример, демонстрирующий как простоту использования, так и мощность:

ConcurrentMap<Key, Graph> graphs = new MapMaker()
   .concurrencyLevel(32)
   .softKeys()
   .weakValues()
   .expiration(30, TimeUnit.MINUTES)
   .makeComputingMap(
       new Function<Key, Graph>() {
         public Graph apply(Key key) {
           return createExpensiveGraph(key);
         }
       });

Кроме того, в выпуске 10.0 Guava был представлен гораздо более обширный com.google.common.cache пакет (есть приятный статья вики о том, как их использовать ).

45
ответ дан 24 November 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: