Легкий JAVA Object Cache API [закрыт]
вопрос
Я ищу JAVA in-memory object caching API. Какие-нибудь рекомендации? Какие решения вы использовали в прошлом?
настоящее
прямо сейчас, я просто использую карту:
Map cache = new HashMap<String, Object>();
cache.put("key", value);
требования
мне нужно увеличить кэш, чтобы включить основные функции, такие как:
- максимальный размер
- Время жить
однако, мне не нужны более сложные функции например:
- доступ из нескольких процессов (сервер кэширования)
- стойкость (на диск)
предложения
кэширование в памяти:
гуавы CacheBuilder - активное развитие. Смотрите это презентация.
LRUMap - Config через API. Нет ТТЛ. Не специально построен для кэширования.
whirlycache - XML config. Рассылка список. Последнее обновление 2006.
cache4j - XML config. Документация на русском языке. Последнее обновление 2006.
кэширование предприятия:
7 ответов:
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 часов.
мне очень нравится
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пакета.
вы также можете проверить мою маленькую библиотеку кэша под названием KittyCache по адресу:
https://github.com/treeder/kitty-cache
есть некоторые показатели производительности против ehcache.
Он используется в SimpleJPA проект как кэш второго уровня.
гуава это MapMaker был заменен на их CacheBuilder класса.
Вы можете проверить 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 под обложками именно то, что вам нужно, и не более того. Вы, кажется, есть довольно хорошее представление о том, что вы ищете.
memcached имеет клиент для Java. http://www.danga.com/memcached/ требует отдельного процесса, чтобы быть сервером кэширования, но мощная вещь.
Comments