Вопрос
Я ищу API кэширования объектов в памяти Java. Есть рекомендации? Какие решения вы использовали в прошлом?
Текущий
Прямо сейчас я использую карту:
Map cache = new HashMap<String, Object>();
cache.put("key", value);
Требования
Мне нужно расширить кеш, включив в него такие основные функции, как:
- Максимальный размер
- Время жить
Однако мне не нужны более сложные функции, такие как:
- Доступ из нескольких процессов (кэширующий сервер)
- Постоянство (на диск)
Предложения
Кэширование в памяти:
- Guava CacheBuilder - активная разработка. Смотрите эту презентацию .
- LRUMap - Конфигурация через API. Нет TTL. Не предназначен для кеширования.
- whirlycache - XML- конфиг . Список рассылки. Последнее обновление 2006 г.
- cache4j - конфигурация XML. Документация на русском языке. Последнее обновление 2006 г.
Кэширование предприятия:
@Cacheable
от jcabi-аспектов : yegor256.com/2014/08/03/cacheable-java-annotation.htmlОтветы:
EHCache очень хорош. Вы можете создать кеш в памяти. Ознакомьтесь с их образцами кода, чтобы увидеть пример создания кеша в памяти. Вы можете указать максимальный размер и время жизни.
EHCache предлагает некоторые расширенные функции, но если вы не заинтересованы в их использовании - не делайте этого. Но приятно знать, что они есть, если ваши требования когда-нибудь изменятся.
Вот кеш в памяти. Создан в коде, без файлов конфигурации.
Создает кеш, который будет содержать 200 элементов и имеет время ttl равное 24 часам.
источник
Мне очень нравится то,
MapMaker
что поставляется с Google Guava ( API )В JavaDoc есть довольно изящный пример, демонстрирующий простоту использования и мощность:
Кроме того, выпуск Guava 10.0 представил гораздо более обширный
com.google.common.cache
пакет (есть хорошая вики-запись о том, как их использовать ).источник
Вы также можете проверить мою небольшую библиотеку кешей под названием KittyCache по адресу:
https://github.com/treeder/kitty-cache
Есть несколько тестов производительности по сравнению с ehcache.
Он используется в проекте SimpleJPA как кеш второго уровня.
источник
Вы можете проверить LinkedHashMap, чтобы реализовать простой кеш без сторонних jar-файлов:
тогда вы можете получить из кеша, например
остальное оставлено как упражнение для читателя :)
источник
MapMaker от Guava был заменен их классом CacheBuilder .
источник
JCS испытан и верен. Несмотря на то, что механизмы кэширования невелики, вы можете покопаться в реальном коде и имитировать то, что они делают с HashMap, именно так, как вам нужно, и не больше. Кажется, вы довольно хорошо представляете, что ищете.
источник
В memcached есть клиент для Java. http://www.danga.com/memcached/ Требуется отдельный процесс, чтобы быть кеширующим сервером, но мощная вещь.
источник