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 часов.
Можно проверить 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);
}
}
отдых, оставленный как осуществление для читателя:)
JCS пробуют и верен. Даже при том, что это легко, насколько механизмы кэширования идут, Вы могли бы вырыть в фактический код и подражать тому, к чему они делают с HashMap под покрытиями точно, в чем Вы нуждаетесь и не больше. У Вас, кажется, есть довольно хорошая идея того, что Вы ищете.
Вы также можете проверить мою маленькую библиотеку кеширования под названием KittyCache по адресу:
https://github.com/treeder/kitty-cache
Есть несколько тестов производительности по сравнению с ehcache.
Он используется в проекте SimpleJPA как кэш второго уровня.
В memcached есть клиент для Java. http://www.danga.com/memcached/ Требуется отдельный процесс, который будет кэширующим сервером, но мощная вещь.
Мне очень нравится 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
пакет (есть приятный статья вики о том, как их использовать ).